天天看小說

第35章

小A:“組合模式比較簡單,也很容易學習,當你面對一個樹形結構的時候,腦筋就該多轉一圈:是否可以在該結構中使用組合模式?”

大B:“我跟你講一種簡單的方法:定義一個公用的接口,讓組合對象和單個對象都去實現該接口。因此,如果面對單個對象,則調用單個對象的方法;如果面對組合對象,遞歸遍歷之,依次調用每個對象的方法;單個對象:相當於樹形結構中的葉節點,它不包含任何子對象。”

小A:“如何去實現組合模式呢?”

大B:“組合對象相當於樹形結構中的枝節點,它可以包含更小的枝對象,也可以包含葉對象。下面的代碼是以抽象類定義,一般儘量用接口interface。”

publicabstractclassEquipment

{

privateStringname;

//實價

publicabstractdoublenetPrice();

//折扣價格

publicabstractdoublediscountPrice();

//增加部件方法

publicbooleanadd(Equipmentequipment){returnfalse;}

//刪除部件方法

publicbooleanremove(Equipmentequipment){returnfalse;}

//注重這裡,這裡就提供一種用於訪問組合體類的部件方法。

publicIteratoriter(){returnnull;}

publicEquipment(finalStringname){this.name=name;}

}

大B:“抽象類Equipment就是Component定義,代表著組合體類的對象們,Equipment中定義幾個共同的方法。”

publicclassDiskextendsEquipment

{

publicDisk(Stringname){super(name);}

//定義Disk實價爲。

publicdoublenetPrice(){return1.;}

//定義了disk折扣價格是0.5對摺。

publicdoublediscountPrice(){return.5;}

}

小A:“什麼是Disk?”

大B:“Disk是組合體內的一個對象,或稱一個部件,這個部件是個單獨元素(Primitive)。還有一種可能是,一個部件也是一個組合體,就是說這個部件下面還有‘兒子’,這是樹形結構中通常的情況,應該比較輕易理解。”

現在我們先要定義這個組合體:

abstractclassCompositeEquipmentextendsEquipment

{

privateinti=0;

//定義一個Vector用來存放‘兒子’

privateLsitequipment=newArrayList();

publicCompositeEquipment(Stringname){super(name);}

publicbooleanadd(Equipmentequipment){

this.equipment.add(equipment);

returntrue;

}

publicdoublenetPrice()

{

doublenetPrice=0.;

Iteratoriter=equipment.iterator();

for(iter.hasNext())

netPrice+=((Equipment)iter.next()).netPrice();

returnnetPrice;

}

publicdoublediscountPrice()

{

doublediscountPrice=0.;

Iteratoriter=equipment.iterator();

for(iter.hasNext())

discountPrice+=((Equipment)iter.next()).discountPrice();

returndiscountPrice;

}

//注重這裡,這裡就提供用於訪問自己組合體內的部件方法。

//上面Disk之所以沒有,是因爲Disk是個單獨(Primitive)的元素。

publicIteratoriter()

{

returnequipment.iterator()

{

//重載Iterator方法

publicbooleanhasNext(){returni

第37章第70章第23章第81章第125章第79章第28章第45章第40章第39章第62章第37章第134章第149章第180章第7章第47章第113章第48章第141章第99章第107章第82章第117章第10章第117章第151章第64章第52章第85章第29章第136章第5章第37章第10章第190章第222章第141章第148章第37章第184章第129章第62章第197章第159章第98章第112章第120章第172章第119章第81章第77章第91章第156章第162章第10章第127章第131章第70章第191章第35章第42章第70章第24章第26章第88章第102章第52章第16章第71章第13章第134章第32章第184章第76章第81章第47章第65章第197章第162章第127章第19章第78章第191章第24章第194章第148章第209章第164章第197章第25章第206章第115章第205章第165章第28章第75章第9章
第37章第70章第23章第81章第125章第79章第28章第45章第40章第39章第62章第37章第134章第149章第180章第7章第47章第113章第48章第141章第99章第107章第82章第117章第10章第117章第151章第64章第52章第85章第29章第136章第5章第37章第10章第190章第222章第141章第148章第37章第184章第129章第62章第197章第159章第98章第112章第120章第172章第119章第81章第77章第91章第156章第162章第10章第127章第131章第70章第191章第35章第42章第70章第24章第26章第88章第102章第52章第16章第71章第13章第134章第32章第184章第76章第81章第47章第65章第197章第162章第127章第19章第78章第191章第24章第194章第148章第209章第164章第197章第25章第206章第115章第205章第165章第28章第75章第9章
主站蜘蛛池模板: 克什克腾旗| 德阳市| 随州市| 花莲市| 水城县| 嫩江县| 绵竹市| 威海市| 阿合奇县| 阳东县| 梁平县| 苍梧县| 谷城县| 达拉特旗| 阿图什市| 松桃| 瓦房店市| 阳西县| 会东县| 施秉县| 曲麻莱县| 兴化市| 阿拉善右旗| 永城市| 涞源县| 镇康县| 辉县市| 巴马| 贵港市| 区。| 兴山县| 沅江市| 白沙| 南雄市| 繁峙县| 玉龙| 甘洛县| 儋州市| 台州市| 长丰县| 嘉义市|