0%

设计模式-抽象工厂模式

抽象工厂模式(Abstract factory pattern)属于创建型模式,通过实现抽象工厂接口,一个具体工厂可以有多种产品

结构


涉及到了四个角色,

  • AbstractFactory:抽象工厂
  • ConcreteFactory:具体工厂
  • Product:抽象产品
  • ConcreteProduct:具体产品

抽象工厂

AbstractFactory,含有多个产生抽象产品方法的接口。示例如下

1
2
3
4
public interface AbstractFactory{
Chair createChair() ;
Desk createDesk();
}

具体工厂

ConcreteFactory,实现AbstractFactory。示例如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public class FactoryForHome implements AbstractFactory{
@Override
public Chair createChair() {
return new HomeChair();
}

@Override
public Desk createDesk() {
return new HomeDesk();
}
}

public class FactoryForSchool implements AbstractFactory{
@Override
public Chair createChair() {
return new SchoolChair();
}

@Override
public Desk createDesk() {
return new SchoolDesk();
}
}

抽象产品

Product,为一组不同但相关的具体产品提供抽象。示例如下

1
2
3
4
5
6
7
public interface Chair {
void sitOn();
}

public interface Desk {
void putSth();
}

具体产品

ConcreteProduct,抽象产品的各种实现。示例如下

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
public class HomeChair implements Chair{
@Override
public void sitOn() {
System.out.println("chair of home");
}
}

public class HomeDesk implements Desk{
@Override
public void putSth() {
System.out.println("desk of home");
}
}

public class SchoolChair implements Chair{
@Override
public void sitOn() {
System.out.println("chair of school");
}
}

public class SchoolDesk implements Desk {
@Override
public void putSth() {
System.out.println("desk of school");
}
}

测试

测试生成product对象,示例如下

1
2
3
4
5
6
7
public class Client {
public static void main(String[] args) {
AbstractFactory factory = new FactoryForHome();
Chair chair = factory.createChair();
chair.sitOn();
}
}

output:chair of home

优势

  • 使用时不需要知道完整的建造过程,简化使用
  • 具体建造者相互独立,易于扩展
  • product对象总会被完整地实例化

缺点

需要创建很多接口和类

完整代码

完整代码已上传,项目地址https://github.com/yuan0824/DesignPattern

参考资料