工厂方法模式-Java设计模式笔记(二)

工厂方法模式是定义一个创建对象的接口,但让实现这个接口的类来决定实例化哪个类,工厂方法让类的实例化推迟到子类中进行。属于创建型,也属于GOF23种设计模式

适用范围

  • 1.创建对象需要大量重复的代码。
  • 2.客户端(应用层)不依赖于产品类实例如何被创建、实现等细节。
  • 3.一个类通过其子类来指定创建哪个对象。

优缺点

优点:用户只需要关心所需产品对应的工厂,无需关心创建细节。加入新产品符合开闭原则,提高可扩展性。

缺点:类的个人容易过多,增加复杂度。增加了系统的抽象性和理解难度。

示例

Video.java 视频抽象类,提供生产视频的抽象方法。

JavaVideo.java Java视频类,继承视频抽象类,并实现自己的生产视频逻辑。

PythonVideo.java Python视频类,继承视频抽象类,并实现自己的生产视频逻辑。

VideoFactory.java 生产视频的工厂方法基类,只定义规范和契约。我们该使用抽象类还是接口,需要根据实际需求来确定。

JavaVideoFactory.java 生产Java视频的工厂方法类,创建需要的对象。

PythonVideoFactory.java 生产Python视频的工厂方法类,创建需要的对象。

Test.java 客户端(应用层)调用工厂方法,创建需要的对象。

UML结构图:

工厂方法模式-Java设计模式笔记(二)

JDK中的使用例子

例如在 java.util.Collection 接口中的 Iterator<E> iterator() 方法,就是一个工厂方法。

在具体的实现工厂 java.util.ArrayList 中重写 Iterator<E> iterator() 方法,用于创建 Iterator 实例对象。

六阿哥

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: