设计模式的理解:组合模式 (Composite)
组合模式(Composite Pattern),又叫部分整体模式,是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。这种类型的设计模式属于结构型模式,它创建了对象组的树形结构。
例如 在C# WinForm 应用程序编程中 RadioButton控件是单选按钮控件 ,GroupBox 控件是控件组,是装入其他控件或其他控件组的容器。当GroupBox设置为disable时,那么其子控件和子GroupBox也要变成disable。如何实现这样的级联?把控件组视为一个(整体)对象,当(整体)对象的属性发生变化时,其中的(部分)子对象属性也跟着变化?这就需要利用到组合模式,利用树形结构进行递归,完成“整体-部分”的批量处理。其中像控件组这样的对象在下图中是Composite,像其他单控件如 RadioButton,Button等在下图中是Leaf,他们共同继承于控件的抽象类Widget
class IWidget{virtual void disable() = 0;virtual void visible() = 0;
}
/**单控件类.....*/
class RadioButton:public IWidget{private :bool isVisited_;public :RadioButton(){isVisited_ =true;}virtual void disable(){isVisited_ =false;}virtual void visible(){isVisited_ =true;}
}
class Button:public IWidget{private :bool isVisited_;public :Button(){isVisited_ =true;}virtual void disable(){isVisited_ =false;}virtual void visible(){isVisited_ =true;}
}/**IWidget集合类.....*/
class GroupBox:public IWidget{private :bool isVisited_;vector<IWidget *> widgets_;public :GroupBox(){isVisited_ =true;}virtual void disable(){isVisited_ =false;for(auto& w : widgets_){w -> disable();}}virtual void visible(){isVisited_ =true;for(auto& w : widgets_){w -> visible();}}void add(IWidget &w){ widgets_.push_back(w);}void remove(IWidget & w){ widgets_.remove(w);}
}void main(){RadioButton radioButton1;RadioButton radioButton2;Button button1;Button button2;GroupBox groupBox1;GroupBox groupBox2;GroupBox groupBoxALL;groupBox1.add(radioButton1);groupBox1.add(button1);groupBox2.add(radioButton2);groupBox2.add(button2);groupBoxALL.add(groupBox1);groupBoxALL.add(groupBox2);groupBox1.disable(); //button1 和radioButton1 和groupBox1的isVisited_状态都是falsegroupBox1.visible(); //button1 和radioButton1 和groupBox1的isVisited_状态都是truegroupBoxALL.disable();/*button1和radioButton1 和groupBox1和button2和radioButton2 和groupBox2和groupBoxALL的isVisited_状态都是false*/
}
设计模式的理解:组合模式 (Composite)相关推荐
- 设计模式之略见一斑(组合模式Composite)
定义: 将对象以树形结构组织起来,以达成"部分-整体"的层次结构,使得客户端对单个对象和组合对象的使用具有一致性. 组合模式其实对是我们数据结构中的树形结构.一颗树下面还有子树,将 ...
- java设计模式组合模式详解_《JAVA设计模式》之组合模式(Composite)
在阎宏博士的<JAVA与模式>一书中开头是这样描述合成(Composite)模式的:html 合成模式属于对象的结构模式,有时又叫作"部分--总体"模式.合成模式将对象 ...
- [设计模式] 8 组合模式 Composite
DP书上给出的定义:将对象组合成树形结构以表示"部分-整体"的层次结构.组合使得用户对单个对象和组合对象的使用具有一致性.注意两个字"树形".这种树形结构在现实 ...
- 设计模式 -- 组合模式(Composite)
写在前面的话:读书破万卷,编码如有神 -------------------------------------------------------------------- 主要内容包括: 初识组合 ...
- 设计模式(17):结构型-组合模式(Composite)(2)
设计模式(Design pattern) 是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. 毫无疑问,设计模式 ...
- 研磨设计模式 之 组合模式(Composite) 3——跟着cc学设计系列
15.3 模式讲解 15.3.1 认识组合模式 (1)组合模式的目的 组合模式的目的是:让客户端不再区分操作的是组合对象还是叶子对象,而是以一个统一的方式来操作. 实现这个目标的关键之处,是设计一 ...
- 【设计模式自习室】结构型:组合模式 Composite
前言 <设计模式自习室>系列,顾名思义,本系列文章带你温习常见的设计模式.主要内容有: 该模式的介绍,包括: 引子.意图(大白话解释) 类图.时序图(理论规范) 该模式的代码示例:熟悉该模 ...
- python 设计模式之组合模式Composite Pattern
#引入一 文件夹对我们来说很熟悉,文件夹里面可以包含文件夹,也可以包含文件. 那么文件夹是个容器,文件夹里面的文件夹也是个容器,文件夹里面的文件是对象. 这是一个树形结构 咱们生活工作中常用的一种结构 ...
- Java设计模式 —— 组合模式(Composite)
Java设计模式 -- 组合模式(Composite) 定义 Composite,组合模式:将对象组合成树形结构以表示部分整体的关系,Composite使得用户对单个对象和组合对象的使用具有一致性. ...
- 【设计模式】组合模式 Composite Pattern
树形结构是软件行业很常见的一种结构,几乎随处可见, 比如: HTML 页面中的DOM,产品的分类,通常一些应用或网站的菜单,Windows Form 中的控件继承关系,Android中的View继承 ...
最新文章
- useradd与adduser的区别
- spring in action 4 线路图
- 学习嵌入式系统需要具备的条件、方法及步骤
- 战争尾声(nowcoder 215073)
- HTML5常用标签及特殊字符表
- 新功能:阿里云负载均衡支持HTTP/2、WSS协议
- 详解linux io flush
- 深度学习 GPU环境 Ubuntu 16.04 + Nvidia GTX 1080 + Python 3.6 + CUDA 9.
- 真的假的?LiFi或将取代WiFi
- 随想录(windows和linux进行socket通信)
- Angular CLI 常用命令
- 学习使用TestNG进行数据驱动测试
- [转]CMS Content Management System(内容管理系统) 提供商
- 解决IIS安装的问题:要求输入用户名和密码
- 7-60 致命的珠宝 (10分)
- 企业微信机器人WorkTool使用文档
- Markdown语法中使用表情符号
- 零信任架构:下一代网络安全架构?
- 安路TD和modelsim仿真
- Python批量处理lrmx格式文档内指定内容
热门文章
- javascript中常用数组函数
- iOS培训章节——C++函数的重载
- 2. 两数相加(中等)
- SpringBatch处理适配器ItemProcessorAdapter详解
- SpringSecruity整合Oauth2 详解(一)
- Corodva Could not resolve com.android.tools.build:gradle:3.0.1 解决方法
- Python3需要安装的MySQL库是mysqlclient
- Python Django开发案例:显示登录页面
- Linux hostname指令
- Linux 网络及IP概述