zoukankan      html  css  js  c++  java
  • 设计模式:学习笔记(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{
    
    }
    

      

    参考资料

  • 相关阅读:
    软工第二次作业
    Internet: gmail on ubuntu
    English: assign
    Github: write blog by github
    Linux: left shift key not working on ubuntu18.04
    Using Doxygen to generate code documents
    Cpp: object lifetime
    Cpp: struct constructor
    Cpp: pass by reference
    HLS Stream Library
  • 原文地址:https://www.cnblogs.com/MrSaver/p/9000394.html
Copyright © 2011-2022 走看看