抽象工厂 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)层面。新增一个产品必须改变接口以及重新实现子工厂的方法。

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值