定义
为创建一组相关或者相互依赖的对象提供一个接口,而不需要指定它们的具体类。
public abstract class AbstractProductA {
public abstract void method();
}
public class ConcreteProductA1 extends AbstractProductA {
@Override
public void method() {
// TODO Auto-generated method stub
}
}
public class ConcreteProductA2 extends AbstractProductA {
@Override
public void method() {
// TODO Auto-generated method stub
}
}
public abstract class AbstractProductB {
public abstract void method();
}
public class ConcreteProductB1 extends AbstractProductB {
@Override
public void method() {
// TODO Auto-generated method stub
}
}
public class ConcreteProductB2 extends AbstractProductB {
@Override
public void method() {
// TODO Auto-generated method stub
}
}
public abstract class AbstractFactory {
public abstract AbstractProductA createProductA();
public abstract AbstractProductB createProductB();
}
public abstract class AbstractProductA {
public abstract void method();
}
public abstract class AbstractProductB {
public abstract void method();
}
public class Client {
public static void main(String[] args) {
// TODO Auto-generated method stub
AbstractFactory mAbstractFactory1 = new ConcreteFactory1();
mAbstractFactory1.createProductA().method();
mAbstractFactory1.createProductB().method();
AbstractFactory mAbstractFactory2 = new ConcreteFactory2();
mAbstractFactory2.createProductA().method();
mAbstractFactory2.createProductB().method();
}
}
结论
优点:分离接口与实现,客户端使用抽象工厂来创建需要的对象,而客户端根本就不知道具体的实现是谁,客户端只是面向产品的接口编程而已,使其从具体的产品实现中解耦,同时基于接口与实现的分离,使抽象该工厂方法模式在切换产品类时更加灵活,容易。
缺点:类文件的爆炸性增加;不太容易扩展新的产品类,因为每当我们增加一个产品类就需要修改抽象工厂,那么的具体工厂类均会被修改