
目的
将对象组合成树形结构以表示“部分-整体”的层次结构。使得用户对单个对象和组合对象的使用具有一致性。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88
|
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;
|
近期评论