工厂模式

设计模式/创建型设计模式

简述

用工厂方法代替 new 操作,让子类决定实例化哪个类,工厂方法将一个类的实例化延迟到子类

  • 优点
    • 解藕:调用方不用负责对象的创建,只需要使用,明确各自的职责

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
41
42
43
44
public interface Animal {
void run();
}

@Slf4j
public class Cat implements Animal {
public void run() {
log.info("猫 —> 🐱");
}
}

@Slf4j
public class Dog implements Animal {
public void run() {
log.debug("狗 —> 🐶");
}
}

public class SimpleAnimalFactory {
// 简单工厂模式
public static Animal create(int type) {
Animal animal = null;
switch (type) {
case 1:
animal = new Cat();
break;
case 2:
animal = new Dog();
break;
}
return animal;
}
}

//简单工厂模式
// 客户端
public class Client {
public static void main(String[] args) {
Animal simpleCat = SimpleAnimalFactory.create(1);
simpleCat.run();
Animal simpleDog = SimpleAnimalFactory.create(2);
simpleDog.run();
}
}

工厂模式

工厂模式跟简单工厂模式的区别在于简单工厂只有一个工厂类,提供了一个工厂方法,
由入参决定生产那个产品,而工厂模式则定义一个工厂接口,不同的产品工厂实现工厂接口,
生产的产品由产品工厂决定

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public class CatFactory {
public static Animal create() {
return new Cat();
}
}

public class DogFactory {
public static Animal create() {
return new Dog();
}
}

//工厂模式
// 客户端
public class Client {
public static void main(String[] args) {
Animal simpleCat = CatFactory.create();
simpleCat.run();
Animal simpleDog = DogFactory.create();
simpleDog.run();
}
}

抽象工厂模式

抽象工厂就是一个工厂不单生产一个种类的产品,而是生产多个种类的产品,
也就是生产相关产品的产品家族

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
public interface AbstractAnimalFactory {

Animal createCat();

Animal createDog();
}

public class AbstractFactory implements AbstractAnimalFactory {
@Override
public Animal createCat() {
return new Cat();
}

@Override
public Animal createDog() {
return new Dog();
}
}

//抽象工厂模式
// 客户端
public class Client {
public static void main(String[] args) {
AbstractFactory factory = new AbstractFactory();
factory.createCat().run();
factory.createDog().run();
}
}