前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >组合模式

组合模式

作者头像
用户1215536
发布2018-02-05 11:42:15
7000
发布2018-02-05 11:42:15
举报

一、简介

1、组合模式将对象组合成树形结构以表示‘部分和整体’的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。

2、模式中的几个重要的类

Component:组合中的对象声明接口,在适当情况下,实现所有类共有接口的行为。

Leaf:叶节点对象,叶节点没有子节点。由于叶节点不能增加分支和树叶,所以叶节点的Add和Remove没有实际意义。

Composite:实现Componet的相关操作,比如Add和Remove操作。

3、UML

4、所属类别:结构型

二、C++代码

代码语言:javascript
复制
 1 // 组合模式.cpp : 定义控制台应用程序的入口点。
 2 //
 3 
 4 #include "stdafx.h"
 5 #include<iostream>
 6 #include<string>
 7 #include<vector>
 8 using namespace std;
 9 
10 class Component
11 {
12 public:
13     Component(){}
14     virtual ~Component(){}
15     virtual void add(Component *)=0;
16     virtual void remove(Component *)=0;
17     virtual void display(int jibie)=0;//为了看清楚树形关系而设置的显示函数
18 };
19 class Leaf:public Component
20 {
21 private:
22     string name;
23 public:
24     Leaf(string n)
25     {
26         name=n;
27     }
28     ~Leaf(){}
29     virtual void add(Component* a)
30     {
31         cout<<"最底层不能再添加部门"<<endl;
32     }
33     virtual void remove(Component* a)
34     {
35         cout<<"最底层没有可以删除的部门"<<endl;
36     }
37     virtual void display(int jibie)
38     {
39         for(int i=0;i<jibie;i++)
40         {
41             cout<<'-';
42         }
43         cout<<name<<endl;
44     }
45 };
46 class Composite:public Component
47 {
48 private:
49     vector<Component*> com;
50     string name;
51 public:
52     Composite(string n)
53     {
54         name=n;
55     }
56     virtual ~Composite(){}
57     virtual void add(Component* a)
58     {
59         com.push_back(a);
60     }
61     virtual void remove(Component*a)
62     {
63         //com.erase(a);
64     }
65     virtual void display(int num)
66     {
67         for(int i=0;i<num;i++)
68         {
69             cout<<'-';
70         }
71         cout<<name<<endl;
72         num=num+2;
73         vector<Component*>::iterator it;
74         for(it=com.begin();it!=com.end();it++)
75         {
76             (*it)->display(num);
77         }
78     }
79 };
80 
81 int _tmain(int argc, _TCHAR* argv[])
82 {
83     Component *root=new  Composite("河海大学");
84     Component *changzhouxiaoqu=new Composite("河海大学常州校区");
85     Component *wulianwang=new Composite("河海大学常州校区物联网工程学院");
86     Component *jidiangongcheng=new Composite("河海大学常州校区机电工程学院");
87     root->add(changzhouxiaoqu);
88     changzhouxiaoqu->add(wulianwang);
89     changzhouxiaoqu->add(jidiangongcheng);
90     root->display(1);
91     return 0;
92 }

注意:程序中63行还是有点错误,暂时没找出来,所以删除函数还不能用。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2015-01-26 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档