磁盘驱动器(叶节点Leaf)
class FloppyDisk : public Equipment
{
public
FloppyDisk(const char*);
virtual ~FloppyDisk();
virtual Watt Power();
virtual Currency NetPrice();
virtual Currency DiscountPrice();
};
CompositeEquipment为包含其他设备的基类,同时也是Equipment的子类。
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
* CreateIterator();
protected:
CompositeEquipment(const char*);
private:
List
_equipment; }; // CompositeEquipment为访问和管理子设备定义了一些操作 // 操作Add和Remove从存储在_equipment成员变量中的设备列表中插入并删除设备 // 操作CreateIterator返回一个迭代器遍历这个列表。 // NetPrice的缺省实现使用CreateIterator类累加子设备的实际价格。 Currency CompositeEquipment::NetPrice () { Iterator
* i = CreateIterator(); Currency total = 0; for (i->First(); ~i->IsDone(); i->Next()) { total += i->CurrentItem()->NetPrice(); } delete i; return total; } // 现在我们将计算机的底盘表示为CompositeEquipment的子类Chassis class Chassis : public CompositeEquipment { public: Chassis(const char*); virtual ~Chassis(); virtual Watt Power(); virtual Currency NetPrice(); virtual Currency DiscountPrice(); };
类设定完毕,包括单个零件和一些包含若干零件的组合零件。下面就可以对计算机进行组装。
Cabinet* cabinet = new Cabinet("PC Cabinet"); // 机箱节点
Chassis* chassis = new Chassis("PC Cabinet"); // 主板节点
cabinet->Add(chassis); // 将主板组装到机箱上去
Bus* bus = new Bus("MAC 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;
参考资料: 《设计模式:可复用面向对象软件的基础》