设计模式—结构型-Composite(组合)

来源:互联网 发布:网络买彩票 编辑:程序博客网 时间:2024/05/14 20:00

 

 

设计模式结构型-Composite(组合)

 

 

 

1. 意图

 

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

 

 

 

2. 结构图

 

 

 

 

 

 

3. 简述

 

    几乎所有的用户界面系统(GUI)都使用了这个模式。比如MFC系统的基于HWND的窗口控件,GDI+系统的基于Graphics的组件,开源项目QT等,GUIMVC模式中的View

它的好处在于:客户程序Client不用关心现在所操纵的是一个对象(比如ButtonDialog),还是组合对象(比如一个有很多子控件的WindowDialog),都可以调用类似ShowHideDisableEnableMoveWindow等方法,而不用关心操纵的究竟是个Button还是Dialog或是CheckBox等等。

从结构图看出,该模式有三个部分组成:

 

Component

为整个系统提供的所有对象提供借口,也是外界Client调用的接口。比如MFC中的CWnd。为MFCGUI所有控件的父类。并且是外界于GUI系统交流的接口。

 

Composite

可以有子对象的对象。比如MFC中的CDialog。可以有很多子控件,如CButtonCEdit等等。

 

Leaf

 不能有子对象的对象。比如MFC中的CSliderCtrl,它不可能有子控件了。

 

下图是MFCGUI系统中的类的层级图的一部分

 

 

 

4. 实例代码

class Component{virtual ~ Component();// many common opetationsvoid Operation();// sub-objectvoid Add(Component* sub);void Remove(Component* sub);Component* Get(int index);};class Composite : public Component{virtual ~ Composite ();// many common opetationsvoid Operation();// sub-objectvoid Add(Component* sub);void Remove(Component* sub);Component* Get(int index);};class Leaf : public Component{virtual ~ Leaf ();// many common opetationsvoid Operation();};

 

 

 

 

0 0
原创粉丝点击