您的位置:首页 > 其它

设计模式学习--组合

2014-11-10 11:17 134 查看
--来自《设计模式:可复用面向对象软件的基础》

目的

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

Class Equipment

{

Public:
Virtual ~Equipment();

Const char* Name() { return _name};

Virtual Watt Power();
Virtual Currency NetPrice();
Virtual Currency DiscountPrice();

Virtual void Add(Equipment*);
Virtual void Remove(Equipment*);
Virtual Iterator<Equipment*>* CreateIterator();

Protected:
Equipment(const char*);

Private:
Const char* _name;

};

Class FloppyDisk : public Equipment

{

Public:
FloppyDisk(const char*);
Virtual ~FloppyDisk ();

Virtual Watt Power();
Virtual Currency NetPrice();
Virtual Currency DiscountPrice();

};

Class CompositeEquipment : public Equipment

{

Public:
Virtual ~CompositeEquipment ();

Virtual Watt Power();
Virtual Currency NetPrice();
Virtual Currency DiscountPrice();

Virtual void Add(Equipment*);
Virtual void Remove(Equipment*);
Virtual Iterator<Equipment*>* CreateIterator();

Protected:
CompositeEquipment (const char*);

Private:
List<Equipment*> _equipment;

};

Currency CompositeEquipment::NetPrice()

{
Iterator<Equipment*>* I = CreateIterator();
Currency total = 0;
For(i->First(); !i->IsDone(); i->Next())
{
Total += i->CurrentItem()->NetPrice();
}
Delete I;
Return total;

};

Class Chassis : public CompositeEquipment 

{

Public:
Chassis (const char*);
Virtual ~Chassis ();

Virtual Watt Power();
Virtual Currency NetPrice();
Virtual Currency DiscountPrice();

};

Cabinet* cabinet = new Cabinet();

Chassis* chassis = new Chassis();

Cabinet->Add(chassis);

Bus* bus = new Bus("MCA Bus");

Bus->Add(new Card("16Mbs Token Ring"));

Chassis->Add(bus);

Chassis->Add(new FloppyDisk("3.5in Floppy"));

Cout << "The net price is " << chassis->NetPrice() << endl;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: