• Welcome to the world's largest Chinese hacker forum

    Welcome to the world's largest Chinese hacker forum, our forum registration is open! You can now register for technical communication with us, this is a free and open to the world of the BBS, we founded the purpose for the study of network security, please don't release business of black/grey, or on the BBS posts, to seek help hacker if violations, we will permanently frozen your IP and account, thank you for your cooperation. Hacker attack and defense cracking or network Security

    business please click here: Creation Security  From CNHACKTEAM

Recommended Posts

1.目的

将对象组合成一个树形结构来表示“部分-整体”层次结构。复合模式使得单个对象和组合对象的使用一致。

2.结构

jk1iwkxfijl4166.png

3.参与者

组件:

为组合中的对象声明接口;

在适当的时候,实现所有类共享的接口的默认行为;

声明一个接口来访问和管理组件的子组件;

在递归结构中定义一个接口来访问父零件,并在适当时实现它(可选);

叶子:

表示组合中的一个叶节点对象,该叶节点没有子节点;

定义程序集中基本对象的行为;

复合材料:

定义那些有子组件的组件的行为;

内存子组件;

在组件接口中实现与子组件相关的操作;

客户:

通过组件接口操纵复合部件的对象;

4.适应性

组合模式用于以下情况:

当您想要表示一个对象的部分-整体层次结构时;

当期望用户忽略组合对象和单个对象之间的差异时,用户将统一使用组合对象中的所有对象。

5.代码示例

//设备类为部分-整体层次结构中的所有设备定义一个接口。

//设备声明一些操作返回一个设备的属性,比如它的能耗,价格。

//子类为指定的设备实现这些操作。设备还声明了一个CreateIterator操作,它为访问它的部件返回一个迭代器。

//此操作的默认实现返回一个NullIterator,它在空集上迭代。

分类设备

{

公共:

虚拟~设备();

const char * Name(){ return _ Name;}

虚拟瓦特功率();

虚拟货币net price();

虚拟货币discount price();

虚拟void Add(设备*);

虚拟空洞清除(设备*);

虚拟iterator equipment * * create iterator();

受保护的:

设备(const char *);

private:

const char * _ name

};

//设备的子类有Leaf类:代表磁盘驱动器,集成电路,交换机。

类别软盘:公共设备

{

公共:

floppy disk(const char *);

virtual ~ floppy disk();

虚拟瓦特功率();

虚拟货币net price();

虚拟货币discount price();

};

//CompositeEquipment是包含其他设备的基类,也是设备的子类。

分类组合设备:公共设备

{

公共:

virtual ~ composite equipment();

虚拟瓦特功率();

虚拟货币net price();

虚拟货币discount price();

虚拟void Add(设备*);

虚拟空洞清除(设备*);

虚拟iterator equipment * * create iterator();

受保护的:

composite equipment(const char *);

private:

ListEquipment * _设备;

};

netprice的默认实现使用CreateIterator来累计子设备的实际价格。

货币合成设备:网络价格()

{

iterator equipment * * I=create iterator();

货币总额=0;

for(I-First();I-IsDone();i-Next())

{

total=I-CurrentItem()-net price();

}

删除I;

返回总数;

}

//现在我们把电脑的机箱表示为Chassis,CompositeEquipment的子类。Chassis从CompositeEquipment继承了与子类相关的操作。

:级底盘公共复合设备

{

公共:

底盘(const char *);

虚拟~机箱();

虚拟瓦特功率();

虚拟货币net price();

虚拟货币discount price();

};

//我们可以用类似的方式定义其他设备容器,比如Cabineti和Bus。所以我们组装了一个。

//(很简单)个人电脑所需的全部设备。

机柜*机柜=新机柜(' PC机柜');

机箱*机箱=新机箱(“PC机箱”);

机柜-添加(机箱);

Bus * Bus=new Bus(' MCA Bus ');

bus-Add(新卡(' 16Mbs令牌环'));

底盘-添加(总线);

机箱-添加(新软盘(' 3.5英寸软盘'));

cout '净价为' chassis-net price()endl;

6.摘要

组合模式是将对象组合成树形结构,以表示对象的“部分-整体”层次结构。

多个基本对象可以组合成一个大的复合对象,这个复合对象是可重复的和递归的。每个基本对象或复合对象都有一个统一的外部接口供用户使用。组合模式使用户能够以一致的方式使用单个对象和组合对象。

为了确保下面复合中的每个复合对象都有相同的接口,复合模式中的组件类应该提供尽可能多的共享接口。

Link to comment
Share on other sites