聽名字就像是把什麼東西組合在一起的設計模式,所以
組合模式就是將兩個類中的一些共同的方法抽象在一起
然而,很多時候,一些類中的方法很明顯會不一樣,這裡,感覺 headfirst 上那個例子就挺好的,然後我做了下修改。
public
inte***ce
menuitem
首先去設計乙個選單選項,一些和選單公有的方法,獲得名字,列印一些東西,和自己獨有的方法,獲得選單選項上要顯示的內容,這樣看起來並沒有什麼不好。
不過當設計選單的時候
public
inte***ce
menu
這個感覺就像我可以新建乙個資料夾,資料夾裡面可以去放資料夾或者檔案,這樣的話基本上每乙個操作都會成對出現,我們也沒辦法讓乙個檔案繼承自乙個資料夾,而且對於 getchildat 這種方法的實現,還是要選單和選單選項繼承同乙個父類,就算是用泛型也感覺相當不好,這種情況下就要用組合模式了。
public
inte***ce
view
把它們公有和特有的部分全都抽象出來,然後分別實現這個介面。等等,那些沒用的方法怎麼辦,還是先用抽象類實現預設方法吧。
public
abstract
class
viewcomponent
implements
view
@override
public
void
print()
@override
public string gettext()
@override
public
void
add(view view)
@override
public
void
remove(view view)
@override
public view getchildat(int index)
@override
public
intgetchildcount()
}
如果沒辦法操作的話預設拋異常,然後分別繼承這個類去重寫方法。
public
class
menuitem
extends
viewcomponent
@override
public
void
print()
@override
public string gettext()
}
public
class
menu
extends
viewcomponent
@override
public
void
print()
}@override
public
intgetchildcount()
@override
public view getchildat(int index)
@override
public
void
add(view view)
@override
public
void
remove(view view)
}
這個的測試**寫起來比較麻煩 - -
public
class
main
}
這樣的話就通過 view 進行操作,但很明顯操作變得不安全了,但在使用部分,可以省去很多 if 之類的判斷,所以呢,這種設計模式的使用需要慎重一點吧。
the end.
設計模式學習筆記 組合模式
定義 將物件組合成樹形結構以表示 部分 整體 的層次結構,使得使用者對單個物件和組合物件的使用具有一致性。組合模式主要用來處理一些具有 容器特徵 的物件,即他們在充當物件的同時,又可以作為容器包含其他的多個物件。也就是說組合模式表達的是一種樹形的結構,將資料結構中的 樹 用物件導向的方式表現出來了,...
《設計模式》學習筆記 組合模式
組合模式 composite pattern 將物件組合成樹形結構以表示 部分 整體 的層次結構,組合模式使得使用者對單個物件和組合物件的使用具有一致性。掌握組合模式的重點是要理解清楚 部分 整體 還有 單個物件 與 組合物件 的含義。組合模式可以讓客戶端像修改配置檔案一樣簡單的完成本來需要流程控制...
設計模式學習筆記之組合模式
組合模式 允許你將物件組合成樹形結構來表現 整體 部分 層次結構。組合能讓客戶以一致的方式處理個別物件以及物件組合。使用組合結構,我們能把相同的操作應用在組合和個別物件上。換句話說,在大多數情況下,我們可以忽略物件組合和個別物件之間的差別。說明 1 組合模式使新增或者刪除子節點變得容易 場景 1 想...