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设计模式

  • 相关阅读:
    [动态规划]保存子问题的结果
    [字符串]第一个不重复的字符
    [抽象建模问题]扑克牌的顺子判断
    [算法]处理连续小段问题
    [动态规划]最长回文子串
    违法
    TCP的拥塞控制
    SpringBank 开发日志 一种简单的拦截器设计实现
    SPFILEOPENBANKDB.ORA 手动编辑产生问题
    springbank 开发日志 springbank是如何执行一个handler的requestMapping对应的方法的
  • 原文地址:https://www.cnblogs.com/hgwang/p/5872077.html
Copyright © 2011-2022 走看看