抽象工厂模式(Abstract factory pattern)

定义

抽象工厂模式(英语:Abstract factory pattern)是一种软件开发设计模式。抽象工厂模式提供了一种方式,可以将一组具有同一主题的单独的工厂封装起来。在正常使用中,客户端程序需要创建抽象工厂的具体实现,然后使用抽象工厂作为接口来创建这一主题的具体对象。客户端程序不需要知道(或关心)它从这些内部的工厂方法中获得对象的具体类型,因为客户端程序仅使用这些对象的通用接口。抽象工厂模式将一组对象的实现细节与他们的一般使用分离开来。

类图

775964-20171023161056504-1424488699.png

从类图上我们看出相对工厂方法这里多了抽象产品族,而工厂多了创建多出产品族的方法,下面看看java代码实现

java代码实现

抽象产品

public interface ProductA {
    void run();
}

public interface ProductB {
    void run();
}

具体产品

public class ProductA1 implements ProductA {
    @Override
    public void run() {
        System.out.println("beaz1 run");
    }
}

public class ProductB1 implements ProductB {
    @Override
    public void run() {
        System.out.println("bmw1 run");
    }
}

抽象工厂

public interface Creator {
    ProductA creatorProductA();

    ProductB creatorProductB();
}

具体工厂

public class Creator1 implements Creator {
    @Override
    public ProductA creatorProductA() {
        return new ProductA1();
    }

    @Override
    public ProductB creatorProductB() {
        return new ProductB1();
    }
}

实例

看了上面这些类,大家是不有点想起了我们常用的List,就是这种结构。来看看List源码

public interface List<E> extends Collection<E> {

    Iterator<E> iterator();

    ListIterator<E> listIterator();
}

这两个方法是不是正好是抽象工厂构建不同产品的方法呢,然而ArrayList,LinkedList正是具体的工厂,在他们内部有这两个抽象产品IteratorListIterator的具体实现。

总结

设计原则:遵循单一职责、依赖倒置、开闭原则

常用场景:需要一个接口可以提供一个产品族,且不必知道产品的具体种类

使用概率:30%

复杂度:中

变化点:工厂与产品的种类

选择关键点:产品族是否需要一起提供,且是否有一致的接口

逆鳞:无

相关设计模式

建造者模式:两者都是建造一批对象或者说产品,不同的是两者的目的和实现手段,在建造者模式中,是为了复用对象的构建过程而定义了一个指挥者,而在抽象工厂模式中,是为了提供一个这批对象的创建接口而定义了抽象工厂接口。

转载于:https://www.cnblogs.com/learningchencheng/p/7717355.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值