(主如果用在生产制作多种产物,软件有多种皮肤,多种数据库等环境)
一个体系不应该依赖于产物类实例怎样被建立、组合和表达的细节,这关于一切范例的工场形式都是主要的。
体系中有多于一个的产物族,而每次只运用个中某一产物族。
属于同一个产物族的产物将在一同运用,这一束缚必须在体系的设想中体现出来。
体系供应一个产物类的库,一切的产物以一样的接口涌现,从而使客户端不依赖于详细完成
2.形式定义
笼统工场形式(Abstract Factory Pattern):供应一个建立一系列相干或相互依赖对象的接口,而无须指定它们详细的类。笼统工场形式又称为Kit形式,属于对象建立型形式。
3.形式构造
笼统工场形式包括以下角色:
AbstractFactory:笼统工场
ConcreteFactory:详细工场
AbstractProduct:笼统产物
Product:详细产物
为了更清楚地明白工场要领形式,须要先引入两个观点:
产物品级构造:产物品级构造即产物的继续构造,如一个笼统类是电视机,其子类有海尔电视机、海信电视机、TCL电视机,则笼统电视机与详细品牌的电视机之间构成了一个产物品级构造,笼统电视机是父类,而详细品牌的电视机是其子类。
产物族 :在笼统工场形式中,产物族是指由同一个工场生产的,位于差别产物品级构造中的一组产物,如海尔电器工场生产的海尔电视机、海尔电冰箱,海尔电视机位于电视机产物品级构造中,海尔电冰箱位于电冰箱产物品级构造中。
4.代码
流程接口
interface IFlow { IRxAlign CreateRxAlign(); IDispensing CreateDispensing(); } class FlowA : IFlow { public IRxAlign CreateRxAlign() { return new RxAlignA(); } public IDispensing CreateDispensing() { return new DispensingA(); } } class FlowB : IFlow { public IRxAlign CreateRxAlign() { return new RxAlignB(); } public IDispensing CreateDispensing() { return new DispensingB(); } }
耦合接口
interface IRxAlign { event LocationChange LocChange; int[] RoPulse { set; get; } int[] FiPulse { set; get; } int[] RoMaxStep { set; get; } double[] RoRESTarget { set; get; } double[] TxP { set; get; } double[] RESmin { set; get; } double[] RESmax { set; get; } Coordinate Location { set; get; } void LoadPara(string PN); void GoHome(); void Start(); void Stop(); } class RxAlignA : IRxAlign { private ControlCard card; private QSFP28 product; private double RESmax, RESmin, RES; private double[] TxPower; public RxAlignA() { this.RESmax = 1.0; this.RESmin = 0.4; } public bool ConfigPara() { try { this.card = new ControlCard(); this.product = new QSFP28(); return true; } catch { return false; } } public void GoHome() { //QSFP28 go home } public void Start() { //QSFP28 start } public void Stop() { card = null; product = null; } ... } class RxAlignB : IRxAlign { private ControlCard card; private CFP4 product; private double RESmax, RESmin, RES; private double[] TxPower; public RxAlignB() { this.RESmax = 1.0; this.RESmin = 0.4; } public bool ConfigPara() { try { this.card = new ControlCard(); this.product = new CFP4(); return true; } catch { return false; } } public void GoHome() { //CFP4 go home } public void Start() { //CFP4 start } public void Stop() { card = null; product = null; } ... }
点胶接口
interface IDispensing { //code }class DispensingA : IDispensing { //code }class DispensingB : IDispensing { //code }
主线程挪用
flow = new FlowA(); align = flow.CreateRxAlign(); align.LoadPara(this.comboBoxPN.Text); dispens = flow.CreateDispensing(); dispens.//code...
以上就是 从0自学C#09--笼统工场形式实例的内容,更多相干内容请关注ki4网(www.ki4.cn)!