首页 / 设计模式 / 设计模式9——结构型模式之组合模式
设计模式9——结构型模式之组合模式
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了设计模式9——结构型模式之组合模式,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1906字,纯文字阅读大概需要3分钟。
内容图文
定义: 组合模式 (CompositePattern) ,将对象组合成树形结构以表示“部分—整体”的层次结构。“ Composite ”使得用户对单个对象和对组合对象的使用具有一致性。
类型:结构型模式。
类图:
参与者:
- Computer ,客户端,选择是否添加 USB 设备。
- USBDevice ,所有 USB 设备的抽象类,提供 USB 设备的基本通信接口。
- USBMouse ,单个对象,没有子部件。
- USBHub ,也即 Composite 组合对象,可能存在多个子部件。
适用性:
无论是单个对象还是组合对象,用户都希望使用统一接口来控制,这种情况下适合组合模式。
概述:
组合模式给人的感觉很像树干树枝的结构,再一想,其实和
USB
拓扑结构图也一样
(
见下图
)
。主机,可以看作是
Client
,
Hub1
可以看作是组合对象,包括两个
USB
设备以及一个新的组合设备
Hub2.
无论是 USB 设备还是 USBHub ,主机都可以通过相同的命令来访问它们。这也正是组合模式要完成的工作。即 Client 能够通过相同的接口来访问单个设备和组合设备。
示例代码:
#include <iostream> #include <list> using namespace std; // 抽象接口 class CUSBDevice { public: virtual ~CUSBDevice(){} virtual void Add(CUSBDevice* _pDev){} virtual void Remove(CUSBDevice* _pDev){} virtual void Transmit(){} virtual int GetChild(){return 0;} }; // 单一个对象,不能添加新部件 class CUSBMouse : public CUSBDevice { public: virtual void Transmit() { cout<<"传递鼠标移动点击信息"<<endl; } }; // 组合对象,可以添加多个新部件 class CUSBHub : public CUSBDevice { public: virtual void Add(CUSBDevice* _pDev) { m_listDev.push_back(_pDev); } virtual void Remove(CUSBDevice* _pDev) { m_listDev.remove(_pDev); } virtual void Transmit() { cout<<"传输USBHub信息"<<endl; } virtual int GetChild() { return m_listDev.size(); } private: list<CUSBDevice*> m_listDev; };
// 电脑主机先接了一个HubA,HubA再接了一个USB鼠标以及又一个USBHubB
// USBHubB又接一个USB鼠标
int _tmain(int argc, _TCHAR* argv[]) { // 先建立一个USBHub CUSBHub hubA; CUSBDevice* pUSBMA = new CUSBMouse; hubA.Add(pUSBMA); // USBHubB CUSBDevice* pUSBHubB = new CUSBHub; CUSBDevice* pUSBMB = new CUSBMouse; pUSBHubB->Add(pUSBMB); hubA.Add(pUSBHubB); // 移除设备 if (pUSBMA->GetChild() > 0) { cout<<"移除设备"<<endl; } delete pUSBMA; delete pUSBMB; delete pUSBHubB; return 0; }
注意:抽象基类的析构函数一定要是虚函数,否则内存释放的时候会有问题。
优缺点:
- 优点,能够非常灵活地添加单个部件以及组合部件,不用区别对待单个对象以及组合对象。
参考资料:
- 《设计模式——可复用面向对象软件基础》
- 《Java与模式》
- 《大话设计模式》
原文:http://blog.csdn.net/feihe0755/article/details/18268789
内容总结
以上是互联网集市为您收集整理的设计模式9——结构型模式之组合模式全部内容,希望文章能够帮你解决设计模式9——结构型模式之组合模式所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。