欢迎来到天天文库
浏览记录
ID:37856450
大小:70.50 KB
页数:6页
时间:2019-06-01
《Composite(组合)模式》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、设计模式----Composite(组合)模式 GoF:将对象组合合成树形结构以表示“部分--整体”的层次结构。Composite使得用户对单个对象和组合对象的使用具有一致性。 组合体内这些对象都有共同接口,当组合体一个对象的方法被调用执行时,Composite将遍历(Iterator)整个树形结构,寻找同样包含这个方法的对象并实现调用执行。可以用牵一动百来形容。 Composite模式描述了并实现了树形目录结构,在该模式中要有一个组合体,它是一个抽象类或接口(Component),组合体中定义足够多的
2、方法。当组合体(Component)一个对象的方法被调用执行时,Composite将遍历(Iterator)整个树形结构,寻找同样包含这个方法的对象并实现调用执行。 在Composite模式中要用到Iterator(迭代器)模式和ChainofResponsibility(职责链)模式。这两个模式我还没有学到,但是Java中的Iterator我用过。暂时先将Composite模式实现。 以组装电脑为例,首先需要一个组合体:packageComposite; importjava.util.Iterato
3、r; publicabstractclassEquipmentComponent{StringE_name;publicStringgetName(){returnE_name;}//endgetName(...)publicvoidsetName(StringstrName){this.E_name=strName;}//endsetName(...)publicdoublegetPrice(inteNumber,doubleprice){doubleequipmentPrice=0;equipmen
4、tPrice=eNumber*price;returnequipmentPrice;}//endgetPrice()publicabstractdoubleequipmentPrice(inteNumber,doubleprice);publicbooleanadd(EquipmentComponenteq){returnfalse;}//endadd(...)publicbooleanremove(EquipmentComponenteq){returnfalse;}//endremove(...)p
5、ublicIteratoriter(){returnnull;}//enditer()}//endabstractclassEquipmentComponent 接着我们实现一个软盘的类:packageComposite; publicclassFloppyDiskextendsEquipmentComponent{publicFloppyDisk(){//dosomething....}//endFloppyDisk()publicdoubleequipmentPrice(inteNumber,dou
6、bleprice){doubleequipmentPrice=getPrice(eNumber,price);returnequipmentPrice;}//endequipmentPrice()}//endclassFloppyDisk 下面实现Composite类:packageComposite; importjava.util.ArrayList;importjava.util.Iterator; publicclassEquipmentCompositeextendsEquipmentComp
7、onent{/**CreatesanewinstanceofEquipmentComposite*/publicEquipmentComposite(){//dosomething....}//endEquipmentComposite()privateArrayListequipment=newArrayList();publicdoubleequipmentPrice(inteNumber,doubleprice){doubleequipmentPrice=0;IteratoreIter=equip
8、ment.iterator();while(eIter.hasNext())equipmentPrice+=((EquipmentComponent)eIter.next()).getPrice(eNumber,price);returnequipmentPrice;}//endequipmentPrice(...)publicbooleanadd(EquipmentComponenteqc){booleanaddBool=equipmen
此文档下载收益归作者所有