设计模式:学习笔记(6)——抽象工厂模式

设计模式:学习笔记(6)——抽象工厂模式

抽象工厂模式

  在工厂方法模式中具体工厂负责生产具体的产品,每一个具体工厂都对应一种具体产品,工厂方法也具有唯一性,一般情况下,一个具体工厂只有一个工厂方法或者一组重载的工厂方法。但是有时候我们需要一个工厂可以提供多个产品对象,而不是单一的产品对象。此时我们需要使用抽象工厂模式。

  抽象工厂模式与工厂方法模式最大的区别在于,工厂方法模式针对同一产品“大类”,而抽象工厂模式可以生产多个产品“大类”。

说明:在这里呢,我们可以理解一个“大类”为一个抽象产品接口

模式定义

  抽象工厂模式:为创建一组相关或相互依赖的对象提供一个接口,而且无须指定它们的具体类

  这个概念依然抽象难懂,但是如果你已经阅读了工厂(方法)模式,那我们直接看类图即可更加容易理解。

  

  抽象工厂模式中的角色与工厂方法相同,也是4个角色:

  • 抽象工厂角色
  • 具体工厂角色
  • 抽象产品角色
  • 具体产品角色

模式分析

优缺点

  抽象工厂模式的主要优点依然是隔离了具体类的生成,使得客户并不需要知道什么被创建,而且每次可以通过具体工厂类创建多个“大类”的对象,增加大类和大类对象比较方便,但是还是需要修改抽象工厂和具体工厂的代码,违反了开闭原则。

模式应用

  在很多软件系统中需要更换界面主题,要求界面中的按钮、文本框、背景色等一起发生改变时,可以使用抽象工厂模式进行设计。

实例

  如下是一个抽象工厂模式的实例,现在抽象工厂可以生成多个产品“大类”

interface AbstractFactory{
    Phone createPhone(String param);
    Mask createMask(String param);
}

class SuperFactory implements AbstractFactory{

    @Override
    public Phone createPhone(String param) {
        return new iPhone();
    }

    @Override
    public Mask createMask(String param) {
        return new N95();
    }
}

interface Phone{

}

class iPhone implements Phone{

}

interface Mask{

}

class N95 implements Mask{

}

  

参考资料

原文地址:https://www.cnblogs.com/MrSaver/p/9000394.html