工厂模式,简单工厂模式,抽象工厂模式三者有什么区别

文章链接:
http://blog.csdn.net/superbeck/article/details/4446177
工厂方法与抽象工厂的区别: 工厂方法模式: 一个抽象产品类,可以派生出多个具体产品类。 一个抽象工厂类,可以派生出多个具体工厂类。 每个具体工厂类只能创建一个具体产品类的实例。 抽象工厂模式: 多个抽象产品类,每个抽象产品类可以派生出多个具体产品类。 一个抽象工厂类,可以派生出多个具体工厂类。 每个具体工厂类可以创建多个具体产品类的实例。 简单工厂模式: 区别: 工厂方法模式只有一个抽象产品类,而抽象工厂模式有多个。 区别: 工厂方法模式只有一个抽象产品类,而抽象工厂模式有多个。 工厂方法模式的具体工厂类只能创建一个具体产品类的实例,而抽象工厂模式可以创建多个。 模板方法模式 我们大多数情况下,都是使用抽象工厂和简单工厂。简单工厂用来创建工厂,抽象工厂创建产品。 工厂的作用,就是创建接口。 无论是简单工厂模式、工厂模式还是抽象工厂模式,它们本质上都是将不变的部分提取出来,将可变的部分留作接口,以达到最大程度上的复用 => 简单工厂角色:核心,封装商业逻辑,通常由一个具体Java类实现 => 抽象产品角色:简单工厂模式创建的对象的父类或者共同的接口,通常由一个Java抽象类或者Java接口实现 => 具体产品角色:简单工厂模式创建的对象是该类的实例,通常由一个具体Java类实现 => 优点: 1. 模式核心是工厂类,该类含有必要的判断逻辑,可以决定在什么时候创建哪一个产品类实例. 2. 客户端避免了直接创建产品对象的责任,仅仅负责消费产品.实现责任分割. => 缺点: 1. 工厂类为上帝类(God Class),一旦它受影响了,涉及整个系统正常运作 2. 工厂类中集中了过多的逻辑,难以维护及扩展 3. 新的产品类加入系统时,工厂角色需要做相应修改,不支持"开-闭"原则 => 应用: DateFormat.getInstance() -> 返回其子类实例对象,如SimpleDateFormat 简单工厂,工厂方法,抽象工厂都属于设计模式中的创建型模式。其主要功能都是帮助我们把对象的实例化部分抽取了出来,优化了系统的架构,并且增强了系统的扩展性。 本文是本人对这三种模式学习后的一个小结以及对他们之间的区别的理解。 简单工厂 简单工厂模式的工厂类一般是使用静态方法,通过接收的参数的不同来返回不同的对象实例。 不修改代码的话,是无法扩展的。 工厂方法 工厂方法是针对每一种产品提供一个工厂类。通过不同的工厂实例来创建不同的产品实例。 在同一等级结构中,支持增加任意产品。 抽象工厂 抽象工厂是应对产品族概念的。比如说,每个汽车公司可能要同时生产轿车,货车,客车,那么每一个工厂都要有创建轿车,货车和客车的方法。 应对产品族概念而生,增加新的产品线很容易,但是无法增加新的产品。 小结 ★工厂模式中,重要的是工厂类,而不是产品类。产品类可以是多种形式,多层继承或者是单个类都是可以的。但要明确的,工厂模式的接口只会返回一种类型的实例,这是在设计产品类的时候需要注意的,最好是有父类或者共同实现的接口。 ★使用工厂模式,返回的实例一定是工厂创建的,而不是从其他对象中获取的。 ★工厂模式返回的实例可以不是新创建的,返回由工厂创建好的实例也是可以的。 区别 简单工厂 : 用来生产同一等级结构中的任意产品。(对于增加新的产品,无能为力) 工厂方法 :用来生产同一等级结构中的固定产品。(支持增加任意产品) 抽象工厂 :用来生产不同产品族的全部产品。(对于增加新的产品,无能为力;支持增加产品族) 以上三种工厂 方法在等级结构和产品族这两个方向上的支持程度不同。所以要根据情况考虑应该使用哪种方法。

猜你喜欢

转载自lvwenwen.iteye.com/blog/1546073