1. 定义
为创建一组相关或相互依赖的对象提供一个接口,而且无须指定它们的具体类。
抽象工厂模式是工厂方法模式的升级版本,在有多个业务品种、业务分类时(产品族——两个互相影响的产品线),通过抽象工厂模式产生需要的对象是一种非常好的解决方式。
抽象工厂模式2. 使用场景
一个对象族(或是一组没有任何关系的对象)都有相同的约束,例如生成不同操作系统的程序,则可以使用抽象工厂模式。(相对来说用得比较少)
3. 实现
两个产品线(1、2和A、B)产品的抽象类及其实现:
public abstract class ProductA {}
public class ConcreteProductA1 extends ProductA {}
public class ConcreteProductA2 extends ProductA {}
public abstract class ProductB {}
public class ConcreteProductB1 extends ProductB {}
public class ConcreteProductB2 extends ProductB {}
抽象工厂类:
public abstract class Factory {
public abstract ProductA createProductA();
public abstract ProductB createProductB();
}
具体的工厂实现类:
public class ConcreteFactory1 extends Factory {
@Override
public ProductA createProductA() {
return new ConcreteProductA1();
}
@Override
public ProductB createProductB() {
return new ConcreteProductB1();
}
}
public class ConcreteFactory2 extends Factory {
@Override
public ProductA createProductA() {
return new ConcreteProductA2() {
};
}
@Override
public ProductB createProductB() {
return new ConcreteProductB2();
}
}
4. 优点
- 封装性:与工厂方法模式一样,高层模块无需关心产品的具体实现,只需要关心接口。
- 产品族内的约束为非公开状态,例如可以增加控制产品族之间的比例的功能。
5. 缺点
- 扩展性差:产品族难扩展,产品等级易扩展。
网友评论