组合模式C++实现

1定义

将对象组合成树形结构以表示“部分-整体”的层次结构,使得用户对单个对象和组合对象的使用具有一致性

2类图

角色分析

Component抽象构建角色

定义参加组合独享的共同方法和属性,可以定义一些默认的行为或者属性

Leaf叶子结构,旗下没有分支,是最小的遍历单位

Composite树枝结构,作用是组合树枝节点和叶子结点形成的树形结构

3实现

class Component

{

protected:

  Component();

public:

  virtual ~Component() = 0;

  //所有结点都有的共同信息

  virtual void doSomething() = 0;

};

//树枝结构

class Composite :public Component

{

private:

  list<Component> _comList = new list<Component>();

public:

  //增加一个叶子构建或者树枝构建

  void add(Component &Com)

  {

    _comList.push_back(Com);

  }

  void remove(Component &com)

  {

    _comList.remove(com);

  }

  list<Component> getChildren()

  {

    return _comList;

  }

};

//树叶结构

class Leaf:public Component

{

public:

  //覆盖父类方法

  void doSomething()

  {}

};

void display(Composite root)

{

  //遍历root的孩子,

  如果是叶子:打印

  else 

    递归

}

void Test

{

  Composite *root = new Composite();

  root->doSomething();

  composite *branch = new Composite();

  Leaf* leaf = new Leaf();

  root->add(branch);

  root->add(leaf);

}

4应用

①优点

高层模块调用简单,所有结点都是Component ,局部和整体对调用者来说没有任何区别,高层不必关心自己处理的是单个对象还是整个组合结构

结点自由增加,使用组合模式,如果想增加树枝节点,树叶结点都很容易,只要找到父节点就行,符合开闭原则

②缺点

树枝和树叶结点使用时的定义,直接使用的是实现类。违背依赖倒置原则

③使用场景

维护和展示一部分-整体关系的场景:eg树形菜单,文件和文件夹管理

从一个整体中能够独立出部分模块和功能的场景

④注意事项

只要是树形结构,就考虑组合模式,只要体现这你部分关系,就使用组合模式

5扩展

①项目中常用的一种:由文件中的职员表项简历数据结构。能够通过for和递归直接创建结构

②组合模式:

a安全模式-如上

b透明模式-把用来组合使用的方法放在抽象类中,eg:add,remove,getChild

所以:叶子节点和树枝节点都继承得到以上方法,只是叶子节点内部空实现,什么也不做。。这样做的好处是,客户端遍历直接多态化,不用类型转换。

6提升

对于这个组合模式,可能存在随机访问的问题,那么 增加一个父指针,实现目标即可

设计模式--组合模式C++实现的更多相关文章

  1. 16. 星际争霸之php设计模式--组合模式

    题记==============================================================================本php设计模式专辑来源于博客(jymo ...

  2. Java设计模式——组合模式

    JAVA 设计模式 组合模式 用途 组合模式 (Component) 将对象组合成树形结构以表示“部分-整体”的层次结构.组合模式使得用户对单个对象和组合对象的使用具有唯一性. 组合模式是一种结构型模 ...

  3. 【设计模式】Java设计模式 - 组合模式

    Java设计模式 - 组合模式 不断学习才是王道 继续踏上学习之路,学之分享笔记 总有一天我也能像各位大佬一样 原创作品,更多关注我CSDN: 一个有梦有戏的人 准备将博客园.CSDN一起记录分享自己 ...

  4. c#设计模式-组合模式

    在软件开发过程中,我们经常会遇到处理简单对象和复合对象的情况,例如对操作系统中目录的处理就是这样的一个例子,因为目录可以包括单独的文件,也可以包括文件夹,文件夹又是由文件组成的,由于简单对象和复合对象 ...

  5. [Head First设计模式]生活中学设计模式——组合模式

    系列文章 [Head First设计模式]山西面馆中的设计模式——装饰者模式 [Head First设计模式]山西面馆中的设计模式——观察者模式 [Head First设计模式]山西面馆中的设计模式— ...

  6. JAVA 设计模式 组合模式

    用途 组合模式 (Component) 将对象组合成树形结构以表示“部分-整体”的层次结构.组合模式使得用户对单个对象和组合对象的使用具有唯一性. 组合模式是一种结构型模式. 结构

  7. javascript设计模式-组合模式

    组合模式所要解决的问题: 可以使用简单的对象组合成复杂的对象,而这个复杂对象有可以组合成更大的对象.可以把简单这些对象定义成类,然后定义一些容器类来存储这些简单对象. 客户端代码必须区别对象简单对象和 ...

  8. 设计模式组合模式(Composite)精华

    23种子GOF设计模式一般分为三类:创建模式.结构模型.行为模式. 创建模式抽象的实例,他们帮助如何创建一个系统独立.这是一个这些对象和陈述的组合. 创建使用继承类的类架构更改实例.的对象类型模型的建 ...

  9. 设计模式 -- 组合模式 (Composite Pattern)

    定义: 对象组合成部分整体结构,单个对象和组合对象具有一致性. 看了下大概结构就是集团总公司和子公司那种层级结构. 角色介绍: Component :抽象根节点:其实相当去总公司,抽象子类共有的方法: ...

  10. javascript设计模式——组合模式

    前面的话 在程序设计中,有一些和“事物是由相似的子事物构成”类似的思想.组合模式就是用小的子对象来构建更大的对象,而这些小的子对象本身也许是由更小的“孙对象”构成的.本文将详细介绍组合模式 宏命令 宏 ...

随机推荐

  1. Django小练习

    1.获取系统所有Url from django.urls.resolvers import RegexURLPattern #定义函数 def get_all_url(patterns, prev, ...

  2. SQL Server 使用触发器(trigger)发送电子邮件

    sql 使用系统存储过程 sp_send_dbmail 发送电子邮件语法: sp_send_dbmail [ [ @profile_name = ] 'profile_name' ] [ , [ @r ...

  3. sidekiq-cron定时任务

    参考  时间格式 gem "sidekiq-cron", "~> 1.1" route.rb下添加 require 'sidekiq/cron/web', ...

  4. 使用sql语句创建 表空间 和用户,以及如何彻底删除表空间和用户,使用命令导出和导出数据库

    创建表空间有很多种方式,在安装好oracle 11g 后在网站上 https://localhost:1158/em 手动创建也可以,但是没有sql直接生成方便,下面介绍下如何用sql语句直接生成表空 ...

  5. ThinkPHP 调用后台方法

    <a href="__URL__/del/id/{$vo['id']}">删除</a>

  6. F1Book报表在Win7下运行出现显示不完整问题

    Q: Win7环境下,明明报表要显示20多行,可是显示18行,即显示不完全情况(或常常出现报表底部内容不见了,fe:最后的签名或备注消失了)?? A:只要更新Vcf132.ocx即可.       操 ...

  7. 前端学习笔记之BOM和DOM

    前言 到目前为止,我们已经学过了JavaScript的一些简单的语法.但是这些简单的语法,并没有和浏览器有任何交互. 也就是我们还不能制作一些我们经常看到的网页的一些交互,我们需要继续学习BOM和DO ...

  8. C++开学第二次作业(5.14)

    开学第二次作业(5.14) 代码传送门 题目 给定一个常数K以及一个单链表L,请编写程序将L中每K个结点反转.例如:给定L为1→2→3→4→5→6,K为3,则输出应该为3→2→1→6→5→4:如果K为 ...

  9. 戴尔服务器使用omreport(OMSA)查看监控硬件信息

    安装OMSA wget -q -O - http://linux.dell.com/repo/hardware/latest/bootstrap.cgi | bash yum install -y n ...

  10. 解读:计数器Counter

    Counters: 44 File System Counters FILE: Number of bytes read=655771325 FILE: Number of bytes written ...