zoukankan      html  css  js  c++  java
  • 《设计模式》-合成模式

      合成模式有时又叫做部分-整体模式(Part-Whole)。合成模式将对象组织到树结构中,可以用来描述整体与部分的关系。合成模式可以使客户端将单纯元素与复合元素同等看待。

      一个树结构由两种节点组成:树枝节 树叶节点 枝节点可 而一个树叶节点不可以有子节点。除了根节点外,其它节点有且只有一个父节点。

      

      抽象构建角色(component):这是一个抽象角色,它给参与组 接口。这个角色给出共有接口及其默认行为。

      树叶构件角色(Lcaf):代表参加组合的树叶对象。一个树叶对象没有下级子对象。

      树枝构件角色(Composite):代表参加组合的有子对象的对象,并给出树枝构件对象的行为。

      合成模式的两种方式:

      一、透明方式

        作为第一种选择,在 Component 里面声明所有的用来管理子类对象的方法,包括 add()、remove()以及getChild()方法这样做的好处是所有的构件都有相同的接口,在客户端看来,树叶对象与合成对象的区别起码在接口层次上消失了,客户端可以同等同的对待所有的对象,这就是透明模式的合成模式。

        这个选择的缺点是不够安全。树叶类对象和合成类对象在本质上是有区别的。树叶类对象不可能有下一个层次的对象,因此 add()、remove()以及 getChild()方法没有意义,是在编译时不会出错,而只会在运行时期才会出错。

      二、安全方式

        第二种选择是在Composite 类里面声明所有的用来管理子类对象的方法。这样的做法是安全的做法。因为树叶类型的对象根本就没有管理子类对象的方法,因此,如果客户端对树叶类对象使用这些方法时,程序会在编译时期出错。

        这个选择的缺点是不够透明,因为树叶类和合成类将具有不同的接口。

        

      

      

        

      总结:合成模式可以使客户端将单纯元素与复合元素同等看待。 嗯好像里面说的就是这么一回事,就是存在无限级别的情况下 可以使用到合成模式,并且合成的对象必须包括add remove 等方法去操作子对象。这个主要一个聚合关系,就是子类里面又聚合了基类,实现了无限子类的管理。 合成模式还分为透明模式和安全模式:透明模式就是所有的子类都包含add、remove等方法 而安全模式,只是在能够拥有子类的类中添加这些方法。

      有个故事就说的是这么一个道理: 从前有个山,山里有个庙、庙里有个老和尚讲故事,讲的故事是,从前有个山.....

      

  • 相关阅读:
    sqlite3中给表添加列
    webpack打包后服务端__dirname失效问题
    nodejs查看本机hosts文件域名对应ip
    vscode远程调试node服务端
    git 删除错误commit
    npm安装模块没有权限解决办法
    node gyp编译所需要的环境
    npm和yarn的淘宝镜像添加
    笨办法学Python 笔记
    梯度下降法优化线性回归算法参数
  • 原文地址:https://www.cnblogs.com/zyj469470971/p/3191904.html
Copyright © 2011-2022 走看看