第38章

大B:“說說組合模式的優點吧!”

小A:“組合模式定義了包含基本對象和組合對象的類層次結構。基本對象可以被組合成更複雜的組合對象,而這個組合對象又可以被組合,這樣不斷地遞歸下去,客戶代碼中,任何用到基本對象的地方都可以使用組合對象了。用戶不用關心到底是處理一個葉節點還是處理一個組合組件,也就是用不著為定義組合而寫一些選擇判斷語句了,簡單地說就是組合模式讓客戶可以一致地使用組合結構和單個對象。”

大B:“嗯,你知不知道什麽是透明方式?什麽是安全方式?及他們的好處。”

小A:“透明方式也就是說在Component中聲明所有用來管理子對象的方法中,其中包括Add、Remove等。這樣實現Component接口的所有子類都具備了Add和Remove。這樣做的好處就是葉節點和枝節點對於外界沒有區別,它們具備完全一致的行為接口。但問題也很明顯,因為Leaf類本身不具備Add()、Remove()方法的功能,所以實現它是沒有意義的。安全方式也就是在Component接口中不去聲明Add和Remove方法,那麽子類的Leaf也不需要去實現它,而是在Composite聲明所有用來管理子類對象的方法。不過由於不透明,所以樹葉和樹枝將不具有相同的接口,客戶端的調用需要做相應的判斷,帶來了不便。”