关系

定义:为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类。
类型:创建类模式

抽象工厂 - 图1

代码

产品

  1. interface IProduct2 {
  2. public void show();
  3. }
  4. class Product1 implements IProduct1 {
  5. @Override
  6. public void show() {
  7. System.out.println("这是产品1");
  8. }
  9. }
  10. class Product2 implements IProduct2 {
  11. @Override
  12. public void show() {
  13. System.out.println("这是产品2");
  14. }
  15. }

工厂

  1. interface IFactory {
  2. public IProduct1 createProduct1();
  3. public IProduct2 createProduct2();
  4. }
  5. class Factory implements IFactory {
  6. @Override
  7. public IProduct1 createProduct1() {
  8. return new Product1();
  9. }
  10. @Override
  11. public IProduct2 createProduct2() {
  12. return new Product2();
  13. }
  14. }

调用类

  1. class Client {
  2. public static void main(String[] args) {
  3. IFactory factory = new Factory();
  4. factory.createProduct1().show();
  5. factory.createProduct2().show();
  6. }
  7. }

优缺点

抽象工厂模式的优点

  1. 抽象工厂模式除了具有工厂方法模式的优点外,最主要的优点就是可以在类的内部对产品族进行约束。所谓的产品族,一般或多或少的都存在一定的关联,抽象工厂模式就可以在类内部对产品族的关联关系进行定义和描述,而不必专门引入一个新的类来进行管理。

抽象工厂模式的缺点

  1. 产品族的扩展将是一件十分费力的事情,假如产品族中需要增加一个新的产品,则几乎所有的工厂类都需要进行修改。所以使用抽象工厂模式时,对产品等级结构的划分是非常重要的。