简单工厂、工厂方法模式、抽象工厂模式简介及区别
2014-12-07 18:04
225 查看
1. 简单工厂模式
简单工厂模式是创建型模式的一种(创建型、结构型、行为型),通过专门定义一个类来负责创建具体类型的实例,要创建的实例一般继承自同一个类;结构一般如下所示:
按照面向过程的习惯,可能直接在客户端中根据条件来创建不同的具体产品实例;对于简单工厂模式而言,是把这部分逻辑抽象出来,放在一个工厂类中,由工厂类负责产生具体的对象,也就是将生产者和消费者分离了。
如上所示,工厂模式中的角色一般包括:
1、工厂角色:
即上图中的JuiceFactory,它可以被客户端调用,其内部负责创建具体的对象;
2、抽象产品类:
即上图中的抽象类Juice,它描述了所有实例公共的接口;
3、具体产品类
即上图中的appleJuice等,实现抽象产品的接口,是工厂角色中要创建的具体实例;
对于简单工厂模式,如果要新增产品,除了新增具体产品类之外,还要修改工厂类;
简单工厂优缺点总结:
优点:从上面的描述可以看出,工厂角色负责产生具体的实例对象,所以在工厂类中需要有必要的逻辑,通过客户的输入能够得到具体创建的实例;所以客户端就不需要感知具体对象是怎么产生的,只需要将必要的信息提供给工厂即可;
缺点:简单工厂模式是违反“开闭原则”,即对扩展开放,对修改关闭;因为如果要新增具体产品,就需要修改工厂类的代码;
2. 工厂方法模式
工厂方法模式:定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法让类把实例化推迟到了子类。工厂方法模式是针对每种商品提供一个工厂类,在客户端中判断使用哪个工厂类来创建对象;
对于简单工厂而言,创建对象的逻辑判断放在了工厂类中,客户不感知具体的类,但是工厂类违反了开闭原则,如果要新增新的具体类,就必须修改工厂类;
对于工厂模式而言,是通过扩展来新增具体类的,但是在客户端就必须感知到具体的类了,要通过具体类的创建工厂来创建具体的实例,也就是判断逻辑由简单工厂的工厂类挪到了客户端中;
工厂模式横向扩展很方便;
3. 抽象工厂模式
抽象工厂模式:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类;ProductA 和ProductB对应的是两类产品,ConcreateFactory1和ConcreateFactory2对应的类似两个产品线,他们都分别生产ProductA和ProductB;
例如:车门和轮胎对应两个产品,宝马和奥迪对应两个产品线;
4. 三种工厂模式对比
简单工厂模式包括一个抽象产品类和一个具体工厂类,产生对象的逻辑判断放在工厂类中,扩展产品时,需要修改工厂类,因此工厂类违反了开闭原则;工厂方法模式包括一个抽象产品类和一个抽象工厂类,每个产品对应一个具体的工厂类,且每个具体的工厂类只能生产一个具体产品类的实例;
抽象工厂模式包括多个抽象产品类和一个抽象工厂类,且每个具体工厂类可能生产多个具体产品类的实例;
相关文章推荐
- 简单工厂模式、工厂方法模式、抽象工厂模式的区别
- 简单工厂模式,工厂方法模式和抽象工厂模式的区别
- 简单工厂、工厂方法模式和抽象工厂模式区别?
- 区别:简单工厂模式、工厂方法模式、抽象工厂模式
- 简单工厂模式,工厂方法模式,抽象工厂模式区别
- 简单工厂模式、工厂方法模式、反射工厂模式、抽象工厂模式
- 创建型模式01:简单工厂模式、工厂方法模式、抽象工厂模式
- 工厂模式(简单工厂模式, 工厂方法模式, 抽象工厂模式)二
- 简单工厂模式和抽象工厂模式的区别:面向接口编程
- 简单工厂、工厂方法模式和抽象工厂模式的分析
- 简单工厂模式、工厂方法模式和抽象工厂模式-设计模式学习
- 简单工厂模式,工厂方法模式和抽象工厂模式的异同
- 简单工厂模式,工厂方法模式,抽象工厂模式 比较
- 设计模式之_简单工厂模式、工厂方法模式、抽象工厂模式 、策略模式、策略与工厂的区别(转)
- 工厂模式:简单工厂模式、工厂方法模式、抽象工厂模式
- 简单工厂模式--工厂方法模式(简介)
- 简单工厂模式与工厂方法模式的区别-(原)
- 简单工厂,工厂方法与抽象工厂模式区别与联系(汇总)
- 简单工厂模式,工厂方法模式,抽象工厂模式 比较
- 简单工厂模式,工厂方法模式及抽象工厂模式比较