抽象工厂 Abstract Factory

父博文地址:设计模式 - Design Patterns


一、是什么?

作用:

  1. 当我需要创建一个产品家族(很多产品)时,我可以使用抽象工厂。

  2. 客户通过抽象接口来创建产品家族,而不需要知道实际产出的具体产品类型。

  3. 实现了解耦客户和具体产品。

行为

  • 定义一个抽象工厂接口,每个抽象工厂的子类都能创建所有产品家族的产品。

这里写图片描述

二、实例

  1. 上面类图的实现

    其它代码就不给了按照类图就能写出来,这里只给出客户的代码:

    public class Client {
        public static void main(String[] args) {
            // 客户选择使用某一个具体的工厂
            AbstractFactory abstractFactory = new ConcreteFactory1();
            // 然后就可以任意创建产品族中的产品,而不需要知道具体的产品(只知道抽象产品AbstractProductA/AbstractProductB)
            AbstractProductA productA = abstractFactory.createProductA();
            System.out.println(productA.getClass().getSimpleName());
            AbstractProductB productB = abstractFactory.createProductB();
        }
    }

三、问答

  1. 抽象工厂的每个方法,看起来都像是工厂方法?

    没错,就是这样。

  2. 抽象工厂和工厂方法创建对象方式的不同?

    工厂方法在类(Class)层面,通过继承以及覆盖来创建对象。新增一个产品时只需要新建一个Class

    抽象工厂在组合(Composition)层面。新增一个产品必须改变接口以及重新实现子工厂的方法。

    新增时有以上差别,只是因为工厂方法只有一个抽象产品,而抽象工厂有多个抽象产品。


猜你喜欢

转载自blog.csdn.net/u010297957/article/details/80381833