1、工厂模式简介

工厂模式属于创建型模式,是专门用来创建对象的模式,抽象了实例化的过程。工厂模式分为 : 工厂方法模式、抽象工厂模式。

在学习工厂方法模式、抽象工厂之前,首先先要了解一下简单工厂模式,简单工厂不在23种设计模式之列,一般它是根据自变量的不同而返回不同的类型。比较简单实用一些,在学习工厂模式之前下来学习一下简单工厂,有助于我们理解工厂模式。

1.1、简单工厂定义

简单工厂是由一个工厂对象决定创建出哪一种产品类的实例。

其实质就是由一个工厂类根据传入的参数,来决定调用哪一个产品类的实例。

1.2、简单工厂的角色(参与者)

工厂角色  : 负责实现创建所有实例的内部逻辑,直接被外部调用,创建所需的产品对象.

抽象产品角色 : 创建所有对象的基类,负责描述所有实例所共有的公共接口

具体产品角色 : 所有创建的对象都是充当这个角色的某个具体类的实例.

1.3、业务需求

需求如下 :  现在有电脑、手机等电子设备,当使用电脑上网时,我要知道是电脑在上网,手机上网时要知道是手机在上网。

1.4、使用简单工厂分析业务需求图

首先我们要抽象出一个电子产品类,电脑、手机继承电子产品,工厂负责生产电子产品

 1  class Program
 2     {
 3         static void Main(string[] args)
 4         {
 5             Factory factory = new Factory();
 6             IElectronic computer = factory.Create("Computer");
 7             computer.Internet();
 8             Console.ReadLine();
 9         }
10     }
11
12     /// <summary>
13     ///  抽象产品角色
14     /// </summary>
15     interface IElectronic
16     {
17         void Internet();
18     }
19     /// <summary>
20     ///  具体产品角色
21     /// </summary>
22     public class Computer : IElectronic
23     {
24         public void Internet()
25         {
26             Console.WriteLine("Computer Internet");
27         }
28     }
29     /// <summary>
30     ///  具体产品角色
31     /// </summary>
32     public class Phone : IElectronic
33     {
34         public void Internet()
35         {
36             Console.WriteLine("Phone Internet");
37         }
38     }
39     /// <summary>
40     /// 工厂角色
41     /// </summary>
42     class Factory
43     {
44
45         public IElectronic Create(string type)
46         {
47             switch (type)
48             {
49                 case "Computer":
50                     return new Computer();
51                 case "Phone":
52                     return new Phone();
53                 default:
54                     return null;
55             }
56         }
57     }

现在如果我想加入一个Ipad的产品,那么我要重新修改工厂类,这样是很不利于软件架构设计的,同时也违反了开闭原则,那么接下来的工厂方法模式,正很好的避免了这几点.

1.5、适用性

创建对象需要大量重复的代码

创建对象需要访问某些信息,而这些信息不应该包含在复合类中。

创建对象的生命周期必须集中管理,以保证在整个程序中具有一致的行为。

1.6、局限性

1 : 重构的话会破坏客户端的代码。

2 : 工厂方法所实例化的类具有私有的构造方法,

2:工厂方法模式简介

2.1 、工厂方法(Factory Method)模式 :

定义一个创建产品对象的工厂接口,将实际创建工厂推迟到子类当中.核心工厂类不在负责产品的创建,这样核心类成为一个抽象工厂角色,仅负责具体工厂子类必须实现的接口,这样进一步抽象化使得工厂方法模式可以使我们的系统不修改具体工厂角色的情况下添加新的产品

上面的一大节的定义,貌似很难,其实理解了就简单的一下几句 :

一个抽象的产品类,可以派生出多个具体产品类.

一个抽象的工厂类,可以派生出多个具体工厂类

每个具体工厂类只能创建一个具体产品类的实例.

2.2、工厂方法的角色(参与者)

1: 抽象工厂角色(Creator) : 工厂方法模式的核心,与应用程序无关,任何在模式中创建的对象的工厂类必须实现这个接口.

2: 具体工厂角色(Concrete Creator) : 实现抽象工厂接口的具体工厂类,包含于应用程序密切相关的逻辑,并且受到应用程序调用以创建产品对象.

3: 抽象产品角色(Product) : 工厂方法模式所创建的对象的超类型,也就是产品对象的基类/接口.

4: 具体产品角色(Contrete Product) : 实现了抽象产品角色所定义的接口,具体产品有专门的具体工厂创建,它们之间往往一一对应.

2.3、业务需求

依旧还是拿出简单工厂的电子产品例子,只不过我们这次添加一个Ipd,即 : 电脑、手机、IPAD。

2.4、使用工厂方法分析业务需求图

 1 class Program
 2     {
 3         static void Main(string[] args)
 4         {
 5             IFactory factory = new ComputerFactory();
 6             IProduct pro = factory.Product();
 7             pro.ProductType();
 8             Console.ReadLine();
 9         }
10     }
11     // 抽象产品角色
12     interface IProduct
13     {
14         void ProductType();
15     }
16     // 具体产品角色
17     class Computer : IProduct
18     {
19         public void ProductType()
20         {
21             Console.WriteLine("Product Is Computer");
22         }
23     }
24     // 具体产品角色
25     class Phone : IProduct
26     {
27         public void ProductType()
28         {
29             Console.WriteLine("Product Is Phone");
30         }
31     }
32     // 抽象工厂角色
33     interface IFactory
34     {
35         IProduct Product();
36     }
37
38     // 具体工厂角色
39     class ComputerFactory : IFactory
40     {
41         public IProduct Product()
42         {
43             return new Computer();
44         }
45     }
46     // 具体工厂角色
47     class PhoneFactory : IFactory
48     {
49         public IProduct Product()
50         {
51             return new Phone();
52         }
53     } 

2.5、工厂方法模式适用性

1: 创建对象需要大量重复的代码。

2: 创建对象需要访问某些信息,而这些信息不应该包含在复合类中。

3:创建对象的生命周期必须集中管理,以保证在整个程序中具有一致的行为。

工厂方法模式常用于接口、框架、工具包库文件中,在这些库文件中需要创建客户端代码实现的具体类型的对象。

2.6、工厂方法的优点

1 : 在系统添加新产品时,无需修改抽象工厂和抽象产品提供的接口,无需修改客户端,也无需修改其他的具体工厂和具体产品,很好的利用了封装和委托.

2 : 符合高内聚低耦合原则.很好的避免了简单工厂中的缺点.

转载于:https://www.cnblogs.com/DeepLearing/p/3927734.html

工厂模式(Factory Patter)相关推荐

  1. 设计模式(一)工厂模式Factory(创建型)

    设计模式一 工厂模式Factory 在面向对象编程中, 最通常的方法是一个new操作符产生一个对象实例,new操作符就是用来构造对象实例的.但是在一些情况下, new操作符直接生成对象会带来一些问题. ...

  2. 设计模式(四)——工厂模式(Factory Pattern)

    工厂模式(Factory Pattern) 意义 工厂模式 实现了创建者和调用者的分离.将实例化对象的代码提取出来,放到一个类中统一管理和维护,达到和主项目的依赖关系的解耦.从而提高项目的扩展和维护性 ...

  3. 设计模式 - 学习笔记 - 工厂模式Factory Pattern

    设计模式 - 学习笔记 - 工厂模式Factory Pattern 1. 简单工厂 1.1 应用场景 1.2 UML 1.3 优劣分析 好处 缺点 1.4 代码示例 抽象产品 AbstractProd ...

  4. 设计模式-工厂模式 Factory Pattern(简单工厂、工厂方法、抽象工厂)

    工厂模式 Factory Pattern(简单工厂.工厂方法.抽象工厂) 工厂模式-创建型模式-提供了创建对象的最佳方式. 在工厂模式中,创建对象时不会对客户端暴露创建逻辑,并且是通过一个共同的接口来 ...

  5. 设计模式 ~ 创建型模式 ~ 工厂模式 ~ Factory Pattern。

    设计模式 ~ 创建型模式 ~ 工厂模式 ~ Factory Pattern. 文章目录 设计模式 ~ 创建型模式 ~ 工厂模式 ~ Factory Pattern. eg. 简单工厂模式. 结构. 优 ...

  6. [设计模式]工厂模式factory

    参考:http://wxg6203.iteye.com/blog/740229 简单工厂模式(simple factory)是类的创建模式,又叫静态工厂方法(static factory method ...

  7. 一文彻底弄懂工厂模式(Factory)

    文章已收录我的仓库:Java学习笔记与免费书籍分享 模式类型 工厂模式属于创建者模式,与对象的创建有关,其中工厂方法模式用于类,而抽象工厂模式用于对象.创建型类模式将对象的部分创建工作延迟到子类,由子 ...

  8. 设计模式之略见一斑(工厂模式Factory)

    在开发中其实我们已经不知道用到了设计模式中的很多模式 ,只是有些我们还未知它具体是哪种模式来着.如工厂模式,单例,适配,外观模式等一些常见模式. 下面是自己学习的一些相关笔记,以做备忘录. 1.工厂模 ...

  9. Spring模式系列(二) 工厂模式(Factory Pattern) - 理解Spring的第一课

    factory pattern在spring的用法 Beanfactory spring框架最依赖的模式,没有之一 这也许是最多程序员使用过的模式之一,我也在我的项目中用过很多次.工厂模式贯穿于整个S ...

最新文章

  1. 神经网络压缩方法:模型量化的概念简介
  2. 云计算与边缘计算协同发展的一些思考
  3. const在函数声明中的应用(转)
  4. hdu4280(最大流)
  5. 兼容浏览器将NodeList对象转换为数组
  6. 【Java】多线程SynchronizedVolatile、锁升级过程 - 预习+第一天笔记
  7. mysql odbc 驱动_mysql odbc驱动 mysql odbc connector
  8. java linux命令远程执行_java执行远程服务器上的shell命令
  9. sublime连接Linux进行vim编辑
  10. STL源代码剖析——STL算法stl_algo.h
  11. power bi日期表相对_在Power BI中使用日期维度表
  12. 手机卫星定位系统_手机怎样连接北斗导航?一打开这个设置,马上连接,很简单...
  13. UNDERSTANDING STRAIGHT-THROUGH ESTIMATOR IN TRAINING ACTIVATION QUANTIZED NEURAL NETS
  14. c-lightning 闪电网络配置洋葱服务(tor)
  15. 得到大学夏季开学典礼之后感
  16. 以太坊手续费详细分析
  17. 关于pbootcms中被挂马以后的处理
  18. echart ——正负条形图
  19. log4j日志打印异常堆栈信息。
  20. 工作岗位必备技能总结

热门文章

  1. python建立ip池
  2. charles 如何获取电脑端微信小程序接口
  3. Standard Templete Library —— Containers
  4. java poi 多个word 合并
  5. 徕芬高速吹风机正式开售!戴森慌不慌?
  6. idea如何配置Android SDK
  7. 【JavaWeb】文件上传下载(213-221)
  8. Android AsyncTask onProgressUpdate 方法的些许研究
  9. 中国脱硫石膏市场趋势报告、技术动态创新及市场预测
  10. URLEncoder的作用