抽象工厂模式

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

image-20230413011148293

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 class FactoryMethod {
public static void main(String[] args) {
Application application = new ConcreteProductA();
Product product = application.getObject();
product.method();
}
}
interface Product{
public void method();
}
class ProductA implements Product{
@Override
public void method() {
System.out.println("前路漫漫亦灿灿😁");
}
}
class ProductB implements Product{
@Override
public void method() {}
}
abstract class Application{
abstract Product createProduct();
Product getObject(){
Product product = createProduct();
return product;
}
}
class ConcreteProductA extends Application{
@Override
Product createProduct() {
return new ProductA();
}
}

class ConcreteProductB extends Application{
@Override
Product createProduct() {
return new ProductB();
}
}

应用场景

1.当你不知道该使用对象的确切类型的时候

2.当你希望为库或框架提供扩展其内部组件的方法时

主要优点

1.将具体产品和创建者耦合

2.符合单一职责原则

3.符合开闭原则

源码中的应用

1
2
3
4
5
6
7
// java api
Calendar.getInstance()
java.text.NumberFormat.getInstance()
java.util.ResourceBundle.getBundle()
// 工厂方法
java.net.URLStreamHandlerFactory
javax.xml.bind.JAXBContext#createMarshaller