结构图
模式说明
模式说明
- 扩展点在AbstractProduct接口的实现类,如果有一对新的实现ProductA3,ProductB,则需要修改抽象工厂AbstractFactory接口---在工厂中增加方法createProductC,然后在具体的实现类ConcreteFactory1和ConcreteFactory2中实现该方法。
- 客户端需要知道使用哪个具体的AbstractFactory实现类。
- 客户端不关心使用哪个具体的AbstractProductA和AbstractProductB实现类。
- 提供一个创建一系列或相关依赖对象的接口,而无需指定它们的具体类。
public static void main(String[] args) {
// 使用ConcreteFactory1
AbstractFactory af1 = new ConcreteFactory1();
af1.createProductA().showProductA();
af1.createProductB().showProductB();
// 使用ConcreteFactory2
AbstractFactory af2 = new ConcreteFactory2();
af2.createProductA().showProductA();
af2.createProductB().showProductB();
}
public interface AbstractFactory {
public AbstractProductA createProductA();
public AbstractProductB createProductB();
}
public interface AbstractProductA {
public void showProductA();
}
public interface AbstractProductB {
public void showProductB();
}
public class ConcreteFactory1 implements AbstractFactory {
@Override
public AbstractProductA createProductA() {
return new ProductA1();
}
@Override
public AbstractProductB createProductB() {
return new ProductB1();
}
}
public class ConcreteFactory2 implements AbstractFactory {
@Override
public AbstractProductA createProductA() {
return new ProductA2();
}
@Override
public AbstractProductB createProductB() {
return new ProductB2();
}
}
public class ProductA1 implements AbstractProductA {
@Override
public void showProductA() {
System.out.println("productA1");
}
}
public class ProductA2 implements AbstractProductA {
@Override
public void showProductA() {
System.out.println("productA2");
}
}
public class ProductB1 implements AbstractProductB {
@Override
public void showProductB() {
System.out.println("productB1");
}
}
public class ProductB2 implements AbstractProductB {
@Override
public void showProductB() {
System.out.println("productB2");
}
}