目录
1、概述
2、代码
3、实际源码应用
1、概述
通俗的讲,工厂方法就是你需要什么对象,就new 一个对应的工厂对象,由工厂对象产生你需要的对象。而工厂对象的核心就是一个产生对象的方法。
客户端不需要知道要创建什么对象,只需要知道要创建对象的工厂类,具体的产品对象都由工厂类产生,客户端只需要知道所需的对象应该找哪一个工厂类即可
比如下图所示的VideoFactory。
好处是可扩展性好,只要出现新的需求类型,比如其他类型的Video,那就新建一个对应的Video类,以及对应的工厂类就可以,对原代码的不产生影响。
坏处就是,随着时间拉长和需求增多,类会很多,可维护性不高。

2、代码
https://github.com/phs999/DesignPatterns/tree/b94b88ac66735e7c0e42c894dc32b58830137dae/design_pattern/src/creational/factorymethod/example2
package creational.factorymethod.example2;
public class Test {
public static void main(String[] args) {
VideoFactory videoFactory = new JavaVideoFactory();
Video video = videoFactory.getVideo();
video.produce();
}
}
package creational.factorymethod.example2;
public class PythonVideoFactory extends VideoFactory{
@Override
public Video getVideo() {
return new PythonVideo();
}
}
package creational.factorymethod.example2;
public class PythonVideo extends Video {
@Override
public void produce() {
System.out.println("录制Python课程视频");
}
}
3、实际源码应用
java.uitl.Collection.java与java.util.ArrayList.java
首先,Collection接口中的iterator方法,类似于上面在VideoFactory抽象类中定义的getVideo。
ArrayList类则实现了Collection接口,同时实现了iterator方法,具体定义了获取Iterator的细节,类似于上面的JavaVideoFactory对VideoFactory抽象类的继承并实现getVideo方法,定义了获取Video对象的细节。


|