抽象工厂模式(Abstract Factory Pattern)是一种比较常用的模式,其定义如下:
Provide an interface for creating families of related or dependent objects without specifying their concrete classes.(为创建一组相关或相互依赖的对象提供一个接口,而且无需指定它们的具体类。)
public abstract class AbstractProductA {}
public abstract class AbstractProductB {}
public abstract class AbstractFactory {
/**
* 抽象类
*
* @return AbstractProductA
*/
abstract AbstractProductA createProductA();
/**
* 抽象类
*
* @return AbstractProductB
*/
abstract AbstractProductB createProductB();
}
public class ConcreteProductA extends AbstractProductA {}
public class ConcreteProductB extends AbstractProductB {}
public class ConcreteFactory extends AbstractFactory {
@Override
AbstractProductA createProductA() {
return new ConcreteProductA();
}
@Override
AbstractProductB createProductB() {
return new ConcreteProductB();
}
}
抽象工厂模式的最大缺点就是产品族扩展非常困难,为什么这么说呢?我们以通用代码为例,如果要增加一个产品C,也就是说产品家族由原来的2个增加到3个,看看我们的程序有多大改动吧!抽象类AbstractFactory
要增加一个方法createProductC()
,然后两个实现类都要修改,想想看,这严重违反了开闭原则,而且我们一直说明抽象类和接口是一个契约