抽象工厂模式:提供一个创建一个一系列相关或互相依赖对象的接口,而无需指定他们具体的类。(针对的是一个系列)
类图:
代码:
产品类:
publicclass AbstractProductA {}
publicclass ProductA1 extends AbstractProductA {}
publicclass ProductA2 extends AbstractProductA{}
publicclass AbstractProductB {}
publicclass ProductB1 extends AbstractProductB {}
publicclass ProductB2 extends AbstractProductB {}
工厂类:
publicinterface IFactory {
AbstractProductA CreateProductA();
AbstractProductB CreateProductB();
}
publicclass ConcreteFactory1 implements IFactory {
@Override
public AbstractProductA CreateProductA() {
returnnew ProductA1();
}
@Override
public AbstractProductB CreateProductB() {
returnnew ProductB1();
}
}
publicclass ConcreteFactory2 implements IFactory {
@Override
public AbstractProductA CreateProductA() {
returnnew ProductA2();
}
@Override
public AbstractProductB CreateProductB() {
returnnew ProductB2();
}
}
优点:可以解决表格型结构对象的创建。如下图:
缺点:抽象工厂结构比较复杂,而且增加一个功能(功能C)就要修改所有的工厂类。
工厂的比较:3个工厂比较像是一个进化的过程!简单工厂针对于单个对象,工厂方法针对抽象对象,而抽象工厂针对的是一个系列的抽象对象。个人感觉抽象工厂其实是相对完善的(完善=复杂)。不是每一个程序都选择完善,而是选择简单。