抽象工厂 Abstract Factory

Posted 有且仅有

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了抽象工厂 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)层面。新增一个产品必须改变接口以及重新实现子工厂的方法。

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


以上是关于抽象工厂 Abstract Factory的主要内容,如果未能解决你的问题,请参考以下文章

抽象工厂模式(Abstract Factory Pattern)

抽象工厂模式(Abstract Factory Pattern)

抽象工厂模式(Abstract Factory Pattern)

Java设计模式:Abstract Factory(抽象工厂)模式

抽象工厂模式(Abstract Factory)

《设计模式》之抽象工厂模式(Abstract Factory)