个人博客

http://www.milovetingting.cn

抽象工厂模式

模式介绍

抽象工厂模式,也是创建型设计模式之一。

模式的定义

为创建一组相关或者相互依赖的对象提供一个接口,而不需要指定它们的具体类。

使用场景

一个对象族有相同的约束时可以使用抽象工厂模式。如,Android,ios都有短信软件和拨号软件,两者都属于软件的范畴,但它们所在的操作系统平台不一样,这时可以使用抽象工厂模式来实现。

简单实现

抽象产品类

1
2
3
4
5
6
7
8
9
10
11
public abstract class AbstractProductA {

public abstract void method();

}

public abstract class AbstractProductB {

public abstract void method();

}

抽象工厂类

1
2
3
4
5
6
7
public abstract class AbstractFactory {

public abstract AbstractProductA createProductA();

public abstract AbstractProductB createProductB();

}

具体产品类

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
public class ProductA1 extends AbstractProductA{

@Override
public void method() {

}

}

public class ProductA2 extends AbstractProductA{

@Override
public void method() {

}

}

public class ProductB1 extends AbstractProductB{

@Override
public void method() {

}

}

public class ProductB2 extends AbstractProductB {

@Override
public void method() {

}

}

具体工厂类

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 Factory1 extends AbstractFactory{

@Override
public AbstractProductA createProductA() {
return new ProductA1();
}

@Override
public AbstractProductB createProductB() {
return new ProductB1();
}

}

public class Factory2 extends AbstractFactory {

@Override
public AbstractProductA createProductA() {
return new ProductA2();
}

@Override
public AbstractProductB createProductB() {
return new ProductB2();
}

}

小结

抽象工厂模式优点:

分离接口与实现

抽象工厂模式缺点:

一是类文件的爆炸性增加,二是不太容易扩展新的产品类,因为每增加一个产品类就需要修改抽象工厂。