zoukankan      html  css  js  c++  java
  • 设计模式 组合模式

    组合模式(Composite Pattern):组成多个对象形成树形结构以表示“整体-部分”的结构层次。组合模式对单个对象(即叶子对象)和组合对象(即容器对象)的使用具有一致性。组合模式又可以称为"部分-整体"(Part-Whole)模式,属于对象的结构模式,他将对象组织到树结构中,可以用来描述整体与部分的关系。

    模式动机:

      组合模式描述了如何将容器对象和叶子对象进行递组合,使得用户在使用时无需对他们进行区分,可以一致的对待容器对象和叶子对象。

    模式结构:

    • Component:抽象构件
    • Leaf:叶子构件
    • Composite:容器构件
    • Client:客户类

    模式分析:

      组合模式的关键是定义一个抽象类,它既可以代表叶子、又可以代表容器,而客户端针对该抽象构件类进行编程,无需知道他到底表示的时叶子还是容器,可以进行统一的处理。

      同时容器对象与抽象构件之间还建立了一个聚合关联关系,在容器对象中既可以包含叶子,也可以包含容器,以此实现递归组合,形成一个树形结构。

    具体类图:

                      

    类图解析:MyElement是定义的抽象构件类,Apple,Banana,Pear,Plate继承自它,Plate是一个果盘类,其内部包含一个MyElement类型的集合

    具体代码实现:

    Plate继承MyElement,并且eat方法里面还有对MyElement类型的对象的调用,因此可以递归的进行遍历,而不用区分其具体类型。

     组合模式的优点:

    • 可以清楚的定义分层次的复杂对象
    • 客户端可以一致的使用组合结构或其中单个对象
    • 可以形成复杂的树形结构
    • 更容易在组合体内部加入对象组件

    缺点:

    • 使设计变得更加抽象
    • 增加新构件时可能会产生一些问题
  • 相关阅读:
    主机访问虚拟机ORACLE报错:ORA-12541: TNS:no listener解决办法&无法启动oracle listener服务解决办法
    C—杨辉三角
    C—水仙花数
    C—数组的转置
    C—完数
    C—判断素数
    C—斐波那契数列[生兔子问题]
    C—9*9乘法表
    eclipse常用快捷键(windows下)
    inline-block和text-indent在IE6,IE7下同时使用的兼容问题解决方法
  • 原文地址:https://www.cnblogs.com/wfswf/p/15619608.html
Copyright © 2011-2022 走看看