1、简介

1.1、意图

定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method 使一个类的实例化延迟到其子类。

1.2、适用性

当一个类不知道它所必须创建的对象的类的时候。

当一个类希望由它的子类来指定它所创建的对象的时候。

当类将创建对象的职责委托给多个帮助子类中的某一个,并且你希望将哪一个帮助子类是代理者这一信息局部化的时候。

1.3、优点

用户只需要知道具体工厂的名称就可得到所要的产品,无须知道产品的具体创建过程;

在系统增加新的产品时只需要添加具体产品类和对应的具体工厂类,无须对原工厂进行任何修改,满足开闭原则;

1.4、缺点

每增加一个产品就要增加一个具体产品类和一个对应的具体工厂类,这增加了系统的复杂度。

2、类图

img

img

3、代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
public interface Car {
String getBrand();
}
public class BenzCar implements Car {
@Override
public String getBrand() {
return "奔驰";
}
}
public class MaybachCar implements Car {
@Override
public String getBrand() {
return "迈巴赫";
}
}
public interface CarFactory {
Car createCar();
}
public class BenzCarFactory implements CarFactory {
@Override
public BenzCar createCar() {
return new BenzCar();
}
}
public class MaybachCarFactory implements CarFactory {
@Override
public MaybachCar createCar() {
return new MaybachCar();
}
}
public class FactoryMethodDemo {
public static void main(String[] args) {
BenzCarFactory benzCarFactory = new BenzCarFactory();
BenzCar benzCar = benzCarFactory.createCar();
System.out.println(benzCar.getBrand());
MaybachCarFactory maybachCarFactory = new MaybachCarFactory();
MaybachCar maybachCar = maybachCarFactory.createCar();
System.out.println(maybachCar.getBrand());
}
}

参考

https://blog.csdn.net/atu1111/article/details/105408170

https://blog.csdn.net/zsjlovesm521/article/details/94382666

https://blog.csdn.net/blueboz/article/details/103172559

http://c.biancheng.net/view/1348.htmlhttps://zhuanlan.zhihu.com/p/489803893)