设计模式复习-组合模式
#pragma once
#include "stdafx.h"
#include<set>
#include<string>
#include<iostream>
using namespace std;/*
设计模式-组合模式(Composite)[用类建一棵树]将对象组合成树形结构以表示 部分-整体 的层次结构。组合模式使得用户对
单个对象和组合对象的使用具有一致性。
*/class CComponent {//所有节点统一接口
protected:string m_strName;
public:CComponent(const string &strName) {m_strName = strName;}virtual void Add(CComponent * const pc) = 0;virtual void Remove(CComponent * const pc) = 0;virtual void Display(const int & nDepth) = 0;
};class CLeaf : public CComponent {
public:CLeaf(const string &strName) : CComponent(strName) {}void Add(CComponent *const pc) {cout << "Cannot add to a leaf" << endl;}void Remove(CComponent *const pc) {cout << "Cannot remove from a leaf" << endl;}void Display(const int &nDepth) {cout << "-" << nDepth << ":" << m_strName << endl;}
};class CCpmposite : public CComponent {
private:set<CComponent*>m_cChildren;
public:CCpmposite(const string &strName) : CComponent(strName) {m_cChildren.clear();}void Add(CComponent * const pc) {m_cChildren.insert(pc);}void Remove(CComponent * const pc) {m_cChildren.erase(pc);delete pc;}void Display(const int &nDepth) {cout << "-" << nDepth << ":" << m_strName << endl;for each(auto i in m_cChildren) {i->Display(nDepth + 1);}}~CCpmposite() {for each(auto i in m_cChildren) {delete i;}}
};int main() {CCpmposite *pRoot = new CCpmposite("root");pRoot->Add(new CLeaf("Lead A"));pRoot->Add(new CLeaf("Lead B"));CCpmposite *pComp = new CCpmposite("Composite X");pComp->Add(new CLeaf("Lead A"));pComp->Add(new CLeaf("Lead B"));pRoot->Add(pComp);pRoot->Display(1);delete pRoot;getchar();return 0;
}
设计模式复习-组合模式相关推荐
- 每天一个设计模式之组合模式
作者按:<每天一个设计模式>旨在初步领会设计模式的精髓,目前采用javascript和python两种语言实现.诚然,每种设计模式都有多种实现方式,但此小册只记录最直截了当的实现方式 :) ...
- 1、【设计模式】组合模式
java设计模式之组合模式 [学习难度:★★★☆☆,使用频率:★★★★☆] 树形结构在软件中随处可见,例如操作系统中的目录结构.应用软件中的菜单.办公系统中的公司组织结构等等,如何运用面向对象的方式 ...
- 详解设计模式:组合模式
组合模式(Composite Pattern),又叫部分整体模式,是 GoF 的 23 种设计模式中的一种结构型设计模式. 组合模式 是用于把一组相似的对象当作一个单一的对象.组合模式依据树形结构来组 ...
- 结构型设计模式之组合模式
结构型设计模式之组合模式 组合模式 应用场景 优缺点 主要角色 组合模式结构 分类 透明组合模式 创建抽象根节点 创建树枝节点 创建叶子节点 客户端调用 安全组合模式 创建抽象根节点 创建树枝节点 创 ...
- java设计模式之组合模式(树形层级)
java设计模式之组合模式 学习难度:★★★☆☆,使用频率:★★★★☆] 树形结构在软件中随处可见,例如操作系统中的目录结构.应用软件中的菜单.办公系统中的公司组织结构等等,如何运用面向对象的方式来 ...
- Java设计模式之组合模式详解
文章目录 详解Java设计模式之组合模式 案例引入 组合模式 定义 模式类图结构 相关角色 典型代码 案例分析 类图设计 实例代码 结果分析 JavaJDK中的组合模式 透明组合模式 安全组合模式 组 ...
- Java设计模式之组合模式(UML类图分析+代码详解)
大家好,我是一名在算法之路上不断前进的小小程序猿!体会算法之美,领悟算法的智慧~ 希望各位博友走过路过可以给我点个免费的赞,你们的支持是我不断前进的动力!! 加油吧!未来可期!! 本文将介绍java设 ...
- 设计模式之组合模式(Composite)摘录
23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式抽象了实例化过程,它们帮助一个系统独立于如何创建.组合和表示它的那些对象.一个类创建型模式使用继承改变被实例化的类,而 ...
- Java 设计模式之组合模式
一.了解组合模式 1.1 什么是组合模式 组合模式允许你将对象组合成树形结构来表现"整体/部分"层次机构.组合能够使客户以一致的方式处理个别对象以及组合对象. 组合模式让我们能够用 ...
最新文章
- R语言ggplot2可视化时间序列散点图、X轴和Y轴都是时间信息、使用as.POSIXct函数自定义指定Y轴的时间范围(setting time limits in y axis)
- LeetCode Flatten a Multilevel Doubly Linked List(dfs)
- vue 判断页面加载完成_在Vue+webpack中详细讲解基础配置
- Web前端要学什么语言?需掌握哪些知识?
- JVM空间申请流程图
- 塑造Visual Studio的未来
- 开机自启动脚本_使用xtu降低笔记本(游戏本)cpu电压及功耗·游戏本延时(以及试着解决开机自启动的问题)...
- bat 中 for 的使用 帮助文档 中文版
- Mysql配置项sync_binlog=0
- B00015 C++实现的图类
- Oracle Licensing
- python 窗口键 键位码_Python制作AI贪吃蛇,很多很多细节、思路都写下来了
- flume系列之:清理HDFS上的tmp文件,把.gz.tmp文件变为.gz文件
- Excel——检查单元格是否包含文本(不区分大小写)
- 代码随想录第十一天 LeetCode 20、1047、150(栈)
- dbeaver(下载、安装图文过程)
- 代码之外——名人哲语
- Python 把两张图片拼起来
- 如何双开或多开skype
- @Inject和@Named