zoukankan      html  css  js  c++  java
  • Factory and AbstractFactory ——抽象与具体的分离

    Factory and AbstractFactory——抽象与具体的分离

             面向对象标准关注于抽取一系列事物的共同行为,组建一个基类。行为再划分成两类:

       1:现在及以后不太可能会变化的行为。

       2:以后可扩展的行为。

       图1中,创建产品属于具体行为,类Factory除了创建产品接口外,还包含了一堆抽象特性。Factory应当包含有创建产品这个行为,但不应该指明具体创建哪个产品(产品可以无限制增加,但是创建行为只有一个)。因此,应当把创建产品这个接口保留(对行为的二次抽象),具体创建哪个产品应当由具体Factory类实现。

             基于上述分析,得到修改后的图2,如下所示:

       图2和图1的区别在于,把Factory提升到抽象类的高度,具体实现由ConcreteFactory实现。这样,以后对产品的扩展中,只需要修改ConcreteFactory类即可,完全不用修改抽象特性。

             这种“分而治之”带来的好处,是管理上的清晰便捷,便于代码的维护和扩展。

             由于产品特性各有不同(如自行车和糖果),所有产品继承自一个基类不太现实。对图2进行泛化,得到AbstractFactory模式,如图3所示:

    图3与图2的差别在于,图3是多重映射关系。图3有多个ConcreteFactory,对应着多组Product。AbstractFactory模式通常由Factory实现。

    参考书:C++设计模式,HeadFirst设计模式

  • 相关阅读:
    jquery 菜单1
    Notepad++在vs2008下编译运行
    Linux readelf命令的使用
    Linux下truss、strace或ltrace的使用
    (转载)new和malloc的区别
    windows xp 设置回环网卡
    Linux下没有网线的情况下,从主机使用SSH登录虚拟机
    Linux ELF文件学习(1)
    C++子类继承父类
    (转载)wireshark抓包的时候有黄条、蓝条各代表什么意思?
  • 原文地址:https://www.cnblogs.com/hgwang/p/5872077.html
Copyright © 2011-2022 走看看