



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;
};
// CompositeEquipment为访问和管理子设备定义了一些操作
// 操作Add和Remove从存储在_equipment成员变量中的设备列表中插入并删除设备
// 操作CreateIterator返回一个迭代器遍历这个列表。
// NetPrice的缺省实现使用CreateIterator类累加子设备的实际价格。
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;
}
// 现在我们将计算机的底盘表示为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;原文:http://blog.csdn.net/zs634134578/article/details/18915925