Java 设计模式——工厂模式

Java设计模式之工厂模式

工厂模式有下面两种:

  1. 简单工厂模式

  2. 工厂方法模式

  3. 抽象工厂模式

简单工厂模式

  • 系统扩展困难,一旦添加新产品就不得不修改工厂逻辑,在产品类型较多时,有可能造成工厂逻辑过于复杂,不利于系统的扩展和维护。

  • 简单工厂模式由于使用了静态工厂方法,造成工厂角色无法形成基于继承的等级结构。

  • 工厂类集中了所有产品创建逻辑,一旦不能正常工作,整个系统都要受到影响。

工厂方法模式

工厂方法模式:定义了一个创建对象的接口,但由子类决定要实例化哪一个。工厂方法把类实例化延迟到子类。抽象工厂模式:提供一个接口,用于创建相关或者依赖对象的家族,而不需要明确指定具体类。

接口,广义的说法,指的是抽象类或方法接口或接口方法

  • 创建者类:抽象类,定义了一个抽象工厂方法,让子类实现此方法制造产品。
  • 具体创建者类:创建者的子类,实现了工厂方法,由该子类决定要实例化哪一个类不代表子类真正决定创建哪一个产品,而是说编写创建者类时,不需要具体知道需要创建哪一个类,而是根据选择哪一个类,就自然在运行时创建该产品类。
  • 产品类:抽象类或接口,实现该产品接口创建具体的产品类,在使用时只需要把引用指向他,而不是具体的类(多态)。

这样做的目的:

  • 使用子类实现创建产品帮助我们将产品的实现使用解耦,需要增加产品或者改变产品的实现时,创建者都不受影响。
  • 客户端不需要知道具体产品类的类名,只需要知道所对应的工厂即可。

依赖倒置

设计原则:

  • 要依赖抽象,不依赖具体类。

不能让高层组件依赖低层组件。高层组件:由其他低层组件定义其行为的类(有低层组件构成,具体更复杂的功能),面向接口编程的思想。

问题:类A直接依赖类B,假如要将类A改为依赖类C,则必须通过修改类A的代码来达成。这种场景下,类A一般是高层模块,负责复杂的业务逻辑;类B和类C是低层模块,负责基本的原子操作;假如修改类A,会给程序带来不必要的风险。

抽象工厂模式

抽象工厂模式:提供一个接口,用于创建相关或者依赖对象的家族,而不需要明确指定具体类。

接口中创建每个产品的接口就使用了工厂方法。

普通工厂、抽象工厂模式和工厂方法模式比较

比较:

  • 普通工厂不是一种设计模式,但是实现了对象创建的封装和松耦合

  • 工厂方法使用继承:把创建委托给子类,子类实现工厂方法创建产品

  • 抽象工厂使用组合:对象的创建被实现接口方法的类创建

优点:

  • 都实现松耦合,把应用程序和具体类促进解耦
  • 依赖倒置原则:避免依赖具体对象,尽量依赖抽象

使用:

  • 抽象工厂:当你需要创建一整套产品家族时使用
  • 工厂方法:把产品使用和实例化解耦。如果你不知道要实例化哪些类时可以使用。

代码地址:Github工厂模式


Java设计模式|策略模式

Java设计模式|观察者模式

Java设计模式|装饰者模式

Java设计模式|工厂模式

Java设计模式|命令模式

Java设计模式|适配器模式和外观模式

Java设计模式|模板方法模式

Java设计模式|迭代器模式和组合模式

Java设计模式|状态模式

Java设计模式|代理模式

Java设计模式|单例模式

Java设计模式|备忘录模式

Java设计模式|访问者模式

Java设计模式|复合模式

Java设计模式|桥接模式

Java设计模式|生成器模式

Java设计模式|享元模式/蝇量模式

Java设计模式|原型模式

Java设计模式|责任链模式

Java设计模式|中介者模式

  • 本文作者: dzou | 微信:17856530567
  • 本文链接: http://www.dzou.top/post/4caa56ee.html
  • 版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!
  • 并保留本声明和上方二维码。感谢您的阅读和支持!