对象结构型——组合模式(Composite)
来源:互联网 发布:excel编程容易找工作吗 编辑:程序博客网 时间:2024/05/16 08:29
一、功能
表示“部分-整体”关系,并使用户以一致的方式使用单个对象和组合对象。
二、结构图
上图中,也可以做些扩展,根据需要可以将Leaf和Composite做为抽象基类,从中派生出子类来。
三、优缺点
优点:对于Composite模式,也许人们一开始的注意力会集中在它是如何实现组合对象的。但Composite最重要之处在于用户并不关心是组合对象还是单个对象,用户将以统一的方式进行处理,所以基类应是从单个对象和组合对象中提出的公共接口。
缺点:Composite最大的问题在于不容易限制组合中的组件。
#include <iostream>#include <list>#include <algorithm>using namespace std;class Component{public:Component(){}virtual void Operation()=0;virtual void Add(Component *PChild){} virtual void Remove(Component *PChild){} virtual Component* GetChild(int index){ return NULL;}};class Leaf:public Component{public:Leaf(){}virtual void Operation(){cout<<"Operation by Leaf"<<endl;}};class Composite:public Component{public:Composite(){}~Composite(){list<Component*>::iterator iter1,temp;for(iter1=m_ListOfComponent.begin();iter1!=m_ListOfComponent.end();){temp=iter1;iter1++;delete(*temp);}}virtual void Operation(){cout<<"Operation by Composite"<<endl;list<Component*>::iterator iter1;for(iter1=m_ListOfComponent.begin();iter1!=m_ListOfComponent.end();iter1++){(*iter1)->Operation();}}virtual void Add(Component *pChild){m_ListOfComponent.push_back(pChild);} virtual void Remove(Component *pChild){list<Component*>::iterator iter;iter=find(m_ListOfComponent.begin(),m_ListOfComponent.end(),pChild);if(m_ListOfComponent.end()!=iter){ m_ListOfComponent.erase(iter);}} virtual Component* GetChild(int index){ if( index<=0 || index> m_ListOfComponent.size())return NULL;list<Component*>::iterator iter1,iter2;int i;for(i=1,iter1=m_ListOfComponent.begin(),iter2=m_ListOfComponent.end(); iter1!=iter2;++iter1,++i){if (i==index)break;}return *iter1;}private:list<Component*> m_ListOfComponent;};int main(){ Leaf *pLeaf1 = new Leaf();Leaf *pLeaf2 = new Leaf();Composite* pComposite = new Composite();pComposite->Add(pLeaf1);pComposite->Add(pLeaf2);pComposite->Operation();pComposite->GetChild(2)->Operation();delete pComposite;return 0;}
- 对象结构型——组合模式(Composite)
- 对象结构型模式——组合模式(Composite Pattern)
- 设计模式之十一:Composite(组合)—对象结构型模式
- 设计模式之类对象结构型 — COMPOSITE(组合)模式
- 组合模式(Composite Pattern,对象结构型模式)
- Composite 组合对象结构型模式
- 设计模式—结构型-Composite(组合)
- 结构型模式-----组合模式(Composite)
- Composite模式(组合模式 结构型)
- (结构型模式)COMPOSITE——组合模式
- JAVA设计模式(11) —<结构型>组合模式(Composite)
- C++设计模式 对象结构模式-----组合模式(COMPOSITE)
- Composite 组合(结构型模式)
- 结构型模式: Composite(组合)
- 八、组合模式Composite(结构型)
- 组合模式Composite(结构型)
- Composite组合(结构型模式)
- 【结构型模式】composite(组合)
- python-封装得到virustotal扫描结果
- ORA-19815: WARNING: db_recovery_file_dest_size of 2147483648 bytes is 87.41% used
- C语言:循环名句运用 累加器输入一个数值进行累加,输入13
- ORA-24324: service handle not initialized
- JavaSE使用log4j个性化控制日志
- 对象结构型——组合模式(Composite)
- ORA-28001: the password has expired
- 2011年贝佐斯给股东的一封信:发明的力量
- 操作系统GUI历史与争论
- 近期工作中的错误总结
- 什么是ROM、RAM、DRAM、SRAM和FLASH的区别
- iPhone网络开发之如何使用NSURLConnection
- c++程序实验报告(15-3)
- 小问题积累