从0自学C#09–抽象工厂模式实例

1.适用环境

(主要是用在生产制造多种产品,软件有多种皮肤,多种数据库等环境)

一个系统不应当依赖于产品类实例如何被创建、组合和表达的细节,这对于所有类型的工厂模式都是重要的。

系统中有多于一个的产品族,而每次只使用其中某一产品族。

属于同一个产品族的产品将在一起使用,这一约束必须在系统的设计中体现出来。

系统提供一个产品类的库,所有的产品以同样的接口出现,从而使客户端不依赖于具体实现

2.模式定义

抽象工厂模式(Abstract Factory Pattern):提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类。抽象工厂模式又称为Kit模式,属于对象创建型模式。

3.模式结构

抽象工厂模式包含如下角色:

AbstractFactory:抽象工厂

ConcreteFactory:具体工厂

AbstractProduct:抽象产品

Product:具体产品

为了更清晰地理解工厂方法模式,需要先引入两个概念:

产品等级结构:产品等级结构即产品的继承结构,如一个抽象类是电视机,其子类有海尔电视机、海信电视机、TCL电视机,则抽象电视机与具体品牌的电视机之间构成了一个产品等级结构,抽象电视机是父类,而具体品牌的电视机是其子类。

产品族 :在抽象工厂模式中,产品族是指由同一个工厂生产的,位于不同产品等级结构中的一组产品,如海尔电器工厂生产的海尔电视机、海尔电冰箱,海尔电视机位于电视机产品等级结构中,海尔电冰箱位于电冰箱产品等级结构中。

786.jpg

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–抽象工厂模式实例的内容,更多相关内容请关注PHP中文网(www.php.cn)!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1432055.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月17日 06:09:51
下一篇 2025年12月17日 06:10:07

相关推荐

发表回复

登录后才能评论
关注微信