创建型-抽象工厂模式

前言

​ 工厂模式关注于创建单个对象,通过一个工厂类来实现。但是假如遇到需要创建一系列相关或相互依赖的对象的时候,就有些乏力了,而抽象工厂模式能很好的解决这个问题。

抽象工厂模式

1
2
3
4
5
6
7
8
9
10
11
12
public abstract class Fruit { //水果抽象类
protected final String name;

protected Fruit(String name) {
this.name = name;
}

@Override
public String toString() {
return name +"@"+hashCode();
}
}
1
2
3
4
5
6
public class Apple extends Fruit { //水果实现类

public Apple() {
super("苹果");
}
}
1
2
3
4
5
6
public class Orange extends Fruit { //水果实现类

public Orange() {
super("橘子");
}
}
1
2
3
4
public abstract class AbstractFruitFactory {  //抽象水果工厂
public abstract Fruit getApple();
public abstract Fruit getOrange();
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public class AppleFactory extends AbstractFruitFactory {
@Override
public Fruit createApple() {
return new Apple();
}

@Override
public Fruit createOrange() {
return null; // 在苹果工厂中不创建橘子
}
}

public class OrangeFactory extends AbstractFruitFactory {
@Override
public Fruit createApple() {
return null; // 在橘子工厂中不创建苹果
}

@Override
public Fruit createOrange() {
return new Orange();
}
}

1
2
3
4
5
6
7
8
9
10
11
public class Main {
public static void main(String[] args) {
AbstractFruitFactory appleFactory = new AppleFactory();
Fruit apple = appleFactory.createApple();
System.out.println(apple);

AbstractFruitFactory orangeFactory = new OrangeFactory();
Fruit orange = orangeFactory.createOrange();
System.out.println(orange);
}

工厂模式和抽象工厂模式的区别

工厂模式关注于创建单个对象,通常是通过一个工厂类来实现。

工厂模式适用于创建单个对象的场景,抽象工厂模式适用于需要创建一系列相关对象的场景。

抽象工厂模式则更加封闭,因为它需要一次性定义所有产品族的创建方法。


创建型-抽象工厂模式
https://sp4rks3.github.io/2024/05/07/JAVA设计模式/抽象工厂模式/
作者
Sp4rks3
发布于
2024年5月7日
许可协议