第35章
//定义Disk实价为。
publicdoublenetPrice{return1.;}
//www.youxs.org。
大B:“我跟你讲一种简单的方法:定义一个公用的接口,让组合对象和单个对象都去实现该接口。因此,如果面对单个对象,则调用单个对象的方法;如果面对组合对象,递归遍历之,依次调用每个对象的方法;单个对象:相当于树形结构中的叶节点,它不包含任何子对象。”
小A:“如何去实现组合模式呢?”
大B:“组合对象相当于树形结构中的枝节点,它可以包含更小的枝对象,也可以包含叶对象。下面的代码是以抽象类定义,一般尽量用接口interface。”
大B:“Disk是组合体内的一个对象,或称一个部件,这个部件是个单独元素(Primitive)。还有一种可能是,一个部件也是一个组合体,就是说这个部件下面还有‘儿子’,这是树形结构中通常的情况,应该比较轻易理解。”
现在我们先要定义这个组合体:
abstractclassCompositeEquipmentextendsEquipment
privateinti=0;
//定义一个Vector用来存放‘儿子’
privateLsitequipment=newArrayList;
publicCompositeEquipment(Stringname){super(name);}
publicbooleanadd(Equipmentequipment){
(equipment);
returntrue;
publicdoublenetPrice
doublenetPrice=0.;
Iteratoriter=;
for()
netPrice+=((Equipment)).netPrice;
returnnetPrice;
publicdoublediscountPrice
doublediscountPrice=0.;
Iteratoriter=;
for()
discountPrice+=((Equipment)).discountPrice;
returndiscountPrice;
//注重这里,这里就提供用于访问自己组合体内的部件方法。
//上面Disk之所以没有,是因为Disk是个单独(Primitive)的元素。
publicIteratoriter
//重载Iterator方法
publicbooleanhasNext{returni
publicabstractclassEquipment
privateStringname;
publicclassDiskextendsEquipment
publicDisk(Stringname){super(name);}
//注重这里,这里就提供一种用于访问组合体类的部件方法。
小A:“组合模式比较简单,也很容易学习,当你面对一个树形结构的时候,脑筋就该多转一圈:是否可以在该结构中使用组合模式?”
//实价
publicabstractdoublenetPrice;
publicbooleanadd(Equipmentequipment){returnfalse;}
publicIteratoriter{returnnull;}
publicEquipment(finalStringname){=name;}
大B:“抽象类Equipment就是Component定义,代表着组合体类的对象们,Equipment中定义几个共同的方法。”
publicabstractdoublediscountPrice;
//增加部件方法
publicdoublediscountPrice{;}
小A:“什么是Disk?”
//删除部件方法
publicbooleanremove(Equipmentequipment){returnfalse;}
//折扣价格
其他人正在读 :【穿成恶毒娘,我携巨资带三崽逃荒】【从小欢喜开启诸天之旅】【娘娘总是体弱多病】【四合院之傻子当家】【陈浩苏雪】【从研发易筋经开始登临彼岸】【龙王传说世界的天才玩家M】【斗罗:人在绝世,赝品神灵】【人道独尊】【怀上渣男死对头的娃后,我杀疯了】【人间第一刀】【诸天影视从小欢喜乔卫东开始】【顾命大臣】【哲学家们都干了些什么?】【不辞春山】【遥远的救世主】【不眠春潮】【顾总别虐了,许小姐嫁给你哥了】【人生副本游戏】【华娱零二平凡影帝】【从零开始无限进化】【斗破:阳帝】【我在红楼改气数】【星象制卡师:从昴日星官开始】【四合院从美好生活开始】【正义的使命】【文娱之顶流艺术家】【天下第一萌夫】【斗罗之绝世唐门红尘劫】【悖论】