博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
抽象工厂模式 c#
阅读量:6765 次
发布时间:2019-06-26

本文共 2831 字,大约阅读时间需要 9 分钟。

简单工厂:一个类,提供一个方法,内部用if或者switch产生需要的子对象,若需要增加新对象,需要修改这个类,很不方便。

工厂方法:一个抽象类,提供一个生产一种对象的接口,子工厂方法去实现具体的生产对象的行为,若要增加新对象,只需要通过继承增加新的子工厂类就可以了,不需要对已有的代码做什么修改,这样就解决了简单工厂的弊端。

抽象工厂方法:一个抽象类,提供多个生产多种对象的接口,这样就可以生产具有一组共性的对象,解决了工厂方法只能生产一种对象的弊端。

 

  下面这个例子,用制造汽车的工厂展示了抽象工厂方法的具体实现。

namespace ConsoleApplication1{    class Program    {        ///         /// 汽车轮子        ///         public abstract class Wheel        {            public abstract void Print();        }        ///         /// 汽车发动机        ///         public abstract class Engine        {            public abstract void Print();        }        ///         /// 抽象工厂类,提供不止一个接口,比如造汽车,可以提供造车轮、引擎等方法        ///         public abstract class AbstractFactory        {            public abstract Wheel CreateWheel();            public abstract Engine CreateEngine();        }        public class AudiWheel : Wheel        {            public override void Print()            {                Console.WriteLine("Create AudiWheel");            }        }        public class FordEngine : Engine        {            public override void Print()            {                Console.WriteLine("Create FordEngine");            }        }        public class FordWheel : Wheel        {            public override void Print()            {                Console.WriteLine("Create FordWheel");            }        }        public class AudiEngine : Engine        {            public override void Print()            {                Console.WriteLine("Create AudiEngine");            }        }                ///         /// 生产奥迪的工厂        ///         public class AudiFactory : AbstractFactory        {            public override Wheel CreateWheel()            {                return new AudiWheel();            }            public override Engine CreateEngine()            {                return new AudiEngine();            }        }        ///         /// 生产福特的工厂        ///         public class FordFactory: AbstractFactory        {            public override Wheel CreateWheel()            {                return new FordWheel();            }            public override Engine CreateEngine()            {                return new FordEngine();            }        }        static void Main(string[] args)        {            //制作奥迪汽车            AbstractFactory audiFactory = new AudiFactory();            Wheel audiWheel = audiFactory.CreateWheel();            audiWheel.Print();            Engine audiEngine = audiFactory.CreateEngine();            audiEngine.Print();            //制作福特车            AbstractFactory fordFactory = new FordFactory();            Wheel fordWheel = fordFactory.CreateWheel();            fordWheel.Print();            Engine fordEngine = fordFactory.CreateEngine();            fordEngine.Print();        }    }}

 

转载于:https://www.cnblogs.com/zkzk945/p/5107615.html

你可能感兴趣的文章
第13章 使用Bind提供域名解析服务
查看>>
MT47H64M16NF-25EM相关参数介绍
查看>>
C# FileStream简单介绍和使用
查看>>
我的友情链接
查看>>
Centos7 mount/ rpm/ yum 软件仓库搭建
查看>>
EC2上源安装vnstat
查看>>
高性能Web服务之varnish应用详解及实战应用
查看>>
我的友情链接
查看>>
Docker容器管理--CentOS7安装docker
查看>>
CentOS 6网卡名称修改 以及 centos7 采用传统命名方式
查看>>
Maven 中的jar包冲突
查看>>
lvs基于fwm定义集群服务
查看>>
awk 系列Part3:如何使用 awk 按模式筛选文本或字符串
查看>>
用cxfreeze打包Python3.3成exe文件
查看>>
关于c语言内存地址对齐的一点思考
查看>>
Unity3D游戏开发之《愤怒的小鸟》弹弓实现的技能培训
查看>>
重点掌握HTTP协议
查看>>
软件公司 之 老马与新马
查看>>
golang 并发二(调度)
查看>>
Scala的bounds
查看>>