大话设计模式--组合模式 Composite -- C++实现实例
1. 组合模式: 将对象组合成树形结构以表示”部分--整体“的层次结构,组合模式使用户对单个对象和组合对象的使用具有一致性。
需求中是体现部分与整体层次的结构时,希望用户可以忽略组合对象和单个对象的不同,统一地使用组合结构中的所有对象时,就可以用组合模式。
实例:
company.h company.cpp
#ifndef COMPANY_H
#define COMPANY_H #include <QString> class Company
{
public:
Company(QString name);
void virtual add(Company *c)=0;
void virtual remove(Company *c)=0;
void virtual display(QString depth)=0;
void virtual lineOfDuty()=0; protected:
QString name;
}; #endif // COMPANY_H
#include "company.h" Company::Company(QString name)
{
this->name = name;
}
concretecompany.h concretecompany.cpp
#ifndef CONCRETECOMPANY_H
#define CONCRETECOMPANY_H #include "company.h"
#include <QString>
#include <QList> class ConcreteCompany : public Company
{
public:
ConcreteCompany(QString name);
void add(Company *c);
void remove(Company *c);
void display(QString depth);
void lineOfDuty(); protected:
QList<Company *> *children;
}; #endif // CONCRETECOMPANY_H
#include "concretecompany.h"
#include <QDebug> ConcreteCompany::ConcreteCompany(QString name) : Company(name)
{
children = new QList<Company *>();
} void ConcreteCompany::add(Company *c)
{
children->push_back(c);
} void ConcreteCompany::remove(Company *c)
{
children->removeOne(c);
} void ConcreteCompany::display(QString depth)
{
qDebug() << depth << name;
for(int i=0; i!=children->count(); i++)
{
children->at(i)->display( depth + "--");
}
} void ConcreteCompany::lineOfDuty()
{
for(int i=0; i!=children->count(); i++)
{
children->at(i)->lineOfDuty();
}
}
financedepartment.h financedepartment.cpp 财务
#ifndef FINANCEDEPARTMENT_H
#define FINANCEDEPARTMENT_H #include "company.h"
#include <QString> class FinanceDepartment : public Company
{
public:
FinanceDepartment(QString name);
void add(Company *c);
void remove(Company *c);
void display(QString depth);
void lineOfDuty();
}; #endif // FINANCEDEPARTMENT_H
#include "financedepartment.h"
#include <QDebug> FinanceDepartment::FinanceDepartment(QString name) : Company(name)
{
} void FinanceDepartment::add(Company *c)
{} void FinanceDepartment::remove(Company *c)
{} void FinanceDepartment::display(QString depth)
{
qDebug() << depth << name;
} void FinanceDepartment::lineOfDuty()
{
qDebug() << "lineOfDuty, money";
}
hrdepartment.h hrdepartment.cpp HR
#ifndef HRDEPARTMENT_H
#define HRDEPARTMENT_H #include "company.h"
#include <QString> class HRDepartment : public Company
{
public:
HRDepartment(QString name);
void add(Company *c);
void remove(Company *c);
void display(QString depth);
void lineOfDuty();
}; #endif // HRDEPARTMENT_H
#include "hrdepartment.h"
#include <QDebug> HRDepartment::HRDepartment(QString name) : Company(name)
{
} void HRDepartment::add(Company *c)
{} void HRDepartment::remove(Company *c)
{} void HRDepartment::display(QString depth)
{
qDebug() << depth << name;
} void HRDepartment::lineOfDuty()
{
qDebug() << "lineOfDuty, HR";
}
main.cpp
#include <QCoreApplication>
#include "concretecompany.h"
#include "hrdepartment.h"
#include "financedepartment.h" int main(int argc, char *argv[])
{
ConcreteCompany *root = new ConcreteCompany("beijing_company");
root->add(new HRDepartment("beijing_HR"));
root->add(new FinanceDepartment("beijing_money")); ConcreteCompany *sub = new ConcreteCompany("hangzhou_company");
sub->add(new HRDepartment("hangzhou_HR"));
sub->add(new FinanceDepartment("hangzhou_money"));
root->add(sub); root->display("--");
}
大话设计模式--组合模式 Composite -- C++实现实例的更多相关文章
- 浅谈设计模式--组合模式(Composite Pattern)
组合模式(Composite Pattern) 组合模式,有时候又叫部分-整体结构(part-whole hierarchy),使得用户对单个对象和对一组对象的使用具有一致性.简单来说,就是可以像使用 ...
- 设计模式 - 组合模式(composite pattern) 迭代器(iterator) 具体解释
组合模式(composite pattern) 迭代器(iterator) 具体解释 本文地址: http://blog.csdn.net/caroline_wendy 參考组合模式(composit ...
- 设计模式组合模式(Composite)精华
23种子GOF设计模式一般分为三类:创建模式.结构模型.行为模式. 创建模式抽象的实例,他们帮助如何创建一个系统独立.这是一个这些对象和陈述的组合. 创建使用继承类的类架构更改实例.的对象类型模型的建 ...
- 设计模式 -- 组合模式 (Composite Pattern)
定义: 对象组合成部分整体结构,单个对象和组合对象具有一致性. 看了下大概结构就是集团总公司和子公司那种层级结构. 角色介绍: Component :抽象根节点:其实相当去总公司,抽象子类共有的方法: ...
- 设计模式--组合模式Composite(结构型)
一.概念 组合模式允许你将对象组合成树形结构来表现"整体/部分"层次结构.组合能让客户以一致的方式处理个别对象以及对象组合. 二.UML图 1.Component(对象接口),定义 ...
- C#设计模式——组合模式(Composite Pattern)
一.概述 在软件开发中,我们往往会遇上类似树形结构的对象体系.即某一对象既可能在树形结构中作为叶节点存在,也可能作为分支节点存在.比如在文件系统中,文件是作为叶节点存在,而文件夹就是分支节点.在设计这 ...
- 设计模式-组合模式(Composite)
一.概念 将对象组合成树形结构以表示“部分-整体”的层次结构.组合模式使得用户对单个对象和组合对象的使用具有一致性. 二.模式动机 组合模式,通过设计一个抽像的组件类,使它既代表叶子对象,又代表组合对 ...
- 大话设计模式--工厂模式 factory -- C++实现实例
实现<大话设计模式>的C++版本... 1. 工厂模式 使用的范围是 同一个基类,下面很多子类. (1)这里很容易出现的一个问题n多的子类继承自抽象基类,我们不得不在每次要用到子类的地方就 ...
- 说说设计模式~组合模式(Composite)
返回目录 何时能用到它? 组合模式又叫部分-整体模式,在树型结构中,模糊了简单元素和复杂元素的概念,客户程序可以向处理简单元素一样来处理复杂元素,从而使得客户程序与复杂元素的内部结构解耦.对于今天这个 ...
随机推荐
- servlet文件下载2(单文件下载和批量下载)
使用servlet完毕单文件下载和批量文件下载.批量下载的原理是先将文件打包成zip , 然后再下载. 之前也转载过一篇文件下载的博客,地址:http://blog.csdn.net/ch717828 ...
- linux 中vim学习与总结
平常使用vim总是忘记快捷键,在这里做一个总结一下比较常用的快捷把,省的每次都要去查. h : 向左移动一个字符(←) j : 向上移动一个字符(↑) k : (↓) l : (→) ctrl+f : ...
- html5小趣味知识点系列(一)autofocus
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- mysql主从实验
实验一: 服务器A与服务器B是主从关系,关联的库有test1,.test2库,主从一直运行正常,此时由于业务的需求,需再增加test3库,并让其仍然维持主从关系,应该怎么做? 步骤一: 修改从库服务器 ...
- SVM支持向量机
支持向量机(Support Vector Machine,SVM)是效果最好的分类算法之中的一个. 一.线性分类器: 一个线性分类器就是要在n维的数据空间中找到一个超平面,通过这个超平面能够把两类数据 ...
- Leetcode - CopyWithRandomList
Algorithm: Iterate and copy the original list first. For the random pointer, just copy the value fro ...
- JSP具体篇——application
application对象 application对象用于保存全部应用程序中的共同拥有数据.它在server启动时自己主动创建.在server停止时自己主动销毁. 当application对象没有被销 ...
- ios开发:如何加载大量图片 相册示例
本文转载至 http://www.cnblogs.com/xiongqiangcs/archive/2013/06/13/3134486.html 1. Create a NSOperationQ ...
- python 基础 9.7 创建表
一. 创建表 #/usr/bin/python #-*- coding:utf-8 -*- #@Time :2017/11/22 18:05 #@Auther :liuzhenchuan #@Fi ...
- jedisLock—redis分布式锁实现(转)
一.使用分布式锁要满足的几个条件: 系统是一个分布式系统(关键是分布式,单机的可以使用ReentrantLock或者synchronized代码块来实现) 共享资源(各个系统访问同一个资源,资源的载体 ...