1.定义:

定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method使得一个类的实例化延迟到子类。
2.实现代码如下:
 /// <summary>/// 工厂方法/// </summary>public abstract class Factory{public abstract Compute GetCompute();}public class AddFactory : Factory{public override Compute GetCompute(){return new AddCompute();}}public class JianFaFactory : Factory{public override Compute GetCompute(){return new SubCompute();}}public class ChengFaFactory : Factory{public override Compute GetCompute(){return new ChengFaCompute();}}public class ChuFaFactory : Factory{public override Compute GetCompute(){return new ChuFaCompute();}}/// <summary>/// 计算类/// </summary>public abstract class Compute{protected int number1;public int Number1{get { return number1; }set { number1 = value; }}protected int number2;public int Number2{get { return number2; }set { number2 = value; }}public abstract int GetResult();}/// <summary>/// 加法/// </summary>public class AddCompute : Compute{public override int GetResult(){return number1 + number2;} }/// <summary>/// 减法/// </summary>public class SubCompute : Compute{public override int GetResult(){return number1 - number2;}}/// <summary>/// 乘法/// </summary>public class ChengFaCompute : Compute{public override int GetResult(){return number1 * number2;}}/// <summary>/// 除法/// </summary>public class ChuFaCompute : Compute{public override int GetResult(){return number1 / number2;}}

 
 static void Main(string[] args){int number1 = 1;int number2 = 2;Factory factory = null;string operate = "+";switch (operate){case "+":factory = new AddFactory();break;case "-":factory = new JianFaFactory();break;case "*":factory = new ChengFaFactory();break;case "/":factory = new ChuFaFactory();break;default:break;}Compute compute = factory.GetCompute();compute.Number1 = number1;compute.Number2 = number2;Console.WriteLine(compute.GetResult());Console.ReadKey();}

3.和简单工厂不同的地方是

(1)简单工厂是由switch直接创建具体的产品对象,而工厂方法是swith延迟创建具体的产品对象,先创建相应的工厂,在延迟创建具体的产品对象

(2)简单工厂只能创建一个工厂,工厂方法可以创建多个工厂

4.工厂方法的好处:

(1)用工厂方法在一个类的内部创建对象通常比直接创建对象更灵活。

(2)Factory Method模式通过面向对象的手法,将所要创建的具体对象的创建工作延迟到了子类,从而提供了一种扩展的策略,较好的解决了这种紧耦合的关系。

3.Factory Method 工厂方法模式(创建型模式)相关推荐

  1. Factory Method (工厂方法)---对象创建型模型

    意图: 定义一个创建对象的接口,让子类决定实例化哪一个类. 别名: 虚构造器. 动机: 框架 使用 抽象类定义和维护对象之间的关系.这些对象的创建也由框架负责. 适用性: 当一个类,不知道它所必须创建 ...

  2. Prototype原型模式(创建型模式)

    1.原型模式解决的问题 现在有一个抽象的游戏设施建造系统,负责构建一个现代风格和古典风格的房屋和道路. 前提:抽象变化较慢,实现变化较快(不稳定) 整个抽象的游戏设施建造系统相对变化较慢,本例中只有一 ...

  3. Factory Method工厂方法模式

    定义一个用于创建对象的接口,让子类决定将哪一个类实例化.Factory Method使一个类的实例化延迟到其子类,属于创建型模式 在此模式中,工厂父类负责定义创建产品对象的公共接口,而工厂子类负责生产 ...

  4. C++设计模式之工厂模式(创建型模式)

    学习软件设计,向OO高手迈进! 设计模式(Design pattern)是软件开发人员在软件开发过程中面临的一般问题的解决方案. 这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来 ...

  5. Factory Method工厂方法

    "对象创建"模式 通过"对象创建"模式绕开new,来避免对象创建(new)过程中所导致的紧耦合(以来具体类),从而支持对象创建的稳定.它是接口抽象之后的第一部工 ...

  6. Factory Method 工厂方法

    从耦合关系谈起       耦合关系直接决定着软件面对变化时的行为       – 模块与模块之间的紧耦合使得软件面对变化时,相关的模块都要随之更改       – 模块与模块之间的松耦合使得软件面对 ...

  7. 建造者模式与原型模式/builder模式与prototype模式/创建型模式

    建造者模式 定义 用于简化复杂对象的创建 JDK中的建造者模式 java.lang.StringBuilder中的append()方法,每次调用后返回修改后的对象本身. public StringBu ...

  8. 23种设计模式----原型模式----创建型模式

    原型模式 1.1什么是原型模式 1.2为什么要使用原型模式 2.原型模式的解释 3.例子 3.1例子将要实现的目标 3.2例子设计 3.3原型类 3.4具体实现的3个原型实例类 3.5管理类 3.6工 ...

  9. AbstractFactory抽象工厂模式(创建型模式)

    1.new 的问题 常见的对象创建方法: //创建一个Road对象 Road road=new Road(); new的问题:实现依赖,不能应对具体实例的变化 怎么理解上面这句话呢? 可以这样理解:我 ...

最新文章

  1. mysql从某表中查询数据插入到另一表的处理
  2. Java控制台如何输入一行、多行?
  3. android 视频播放滤镜,用openGL ES+MediaPlayer 渲染播放视频+滤镜效果
  4. 计算机网络【wireshark抓包分析】
  5. 一个毕业生对大学爱情和奋斗的思考!
  6. maven下载包慢解决
  7. 修正discuz发帖首次换行无效的问题
  8. Docker遇到的一些问题和感想
  9. C#中out和ref之间的区别
  10. cmd net use 命令
  11. 服务器怎么格式化系统盘,如何格式化服务器
  12. UBUNTU内核升级后,如何更新 kernel headers
  13. Python_计算加速度
  14. lamp技术研发人员的必备
  15. 1227. 飞机座位分配概率
  16. MFC学习篇:鸡啄米MFC教程字体格式设置函数解析
  17. Android Studio开发(四)SQLite数据库的DAO标准CRUD操作模拟微信通讯录
  18. 销售——LPN(License Plate Number)
  19. 布线光纤方面的知识都在这了,千万别错过!
  20. EN 14351-1门窗及配件—CE认证

热门文章

  1. spring autowired idea都匹配上了_你清楚这几个Spring常用注解吗?
  2. Git简介及其下载 安装 卸载
  3. 【Spring 数据访问终篇】Spring + Hibernate + Mysql
  4. 北斗导航 | 北斗伪距定位、测速与授时——PNT:最小二乘法、加权最小二乘:伪距单点定位
  5. java线程删除文件,线程“main”java.io.jgitinernalexception中的异常:无法删除临时文件c:\users\13 dec...
  6. python只能使用内置数据库_隐藏彩蛋:你知道python有一个内置的数据库吗?
  7. java 监控usb端口插拔_如何监控某种类型的USB设备的插拔?
  8. AI理论知识基础(19)-线性变换(1)
  9. ATen(A TENsor library for C++11)剖析(1)
  10. 【Python】Python入门:4000字能把元组tuple讲透吗?