這是乙個常見的資料庫結構
比較典型的樹狀結構(常見的還有選單)
一般的做法
ceo我們認為是根節點
developdep,developgroup,salesdep,fiancedep是樹枝節點
k,a,b則是樹葉節點(樹葉節點是最小的節點.不能延伸或者有分支)
一般的做法是定義三個介面用來定義三個角色,然後通過add方法進行組合在一起,最終結果
詳細**: 組合模式1
demo:
composite_pattern.example_1
雖然能完成需求,但是問題在於 iroot和ibranch 其實是一樣的,含有的方法也一樣,而且每個類中都有相同的方法getinfo(),需要編寫大量重複**而且不易擴充套件
優化:
我們首先把iroot和ibranch合併為同乙個介面。iroot也認為是ibranch
然後樹枝節點和樹葉節點也有相同的方法 getinfo(),將getinfo()放到icorp介面中
優化詳細**:組合模式2
demo:
composite_pattern.example_2
執行結果:
在檢視優化後的**時會發現banch類和leaf 中都有getinfo的資訊
public class branch implements ibranch
//增加乙個員工(樹枝節點或者樹葉節點)
public void add(icorp corp)
//獲得自己樹枝節點的資訊
@override
public string getinfo()
//獲得下級資訊
@override
public arraylist getsubordinateinfo()
}
public class leaf implements ileaf
//獲得自己的資訊
@override
public string getinfo()
}
將getinfo相關資訊抽象一下
ibranch介面沒有了,crop也變成了抽象類,抽象類其實就是抽象出共性,將這段**放到corp中
private string name = "";
private string position = "";
private int salary = 0;
public corp(string _name, string _position, int _salary)
精簡後的**
public abstract class corp
public string getinfo()
}
//葉子節點
public class leaf extends corp
}
//樹枝節點
public class branch extends corp
//增加乙個員工(樹枝節點或者樹葉節點)
public void add(corp corp)
public arraylist getsubordinateinfo()
}
public class main
private static branch compositecorptree()
//列印
private static string gettree(branch branch)else
}return info;}}
詳細**:組合模式3
demo:
composite_pattern.example_3
這就是組織模式,詳細解析在組合模式2
《設計模式之禪》之組合模式
組合模式也叫合成模式,有時又叫做部分 整體模式,主要用來描述部分與整體的關係,其定義如下 將物件組合成的樹形結構以表示 部分 整體 的層次結構,使得使用者對單個物件和組合物件的使用具有一致性。1 component抽象構件角色 定義參加組合物件的共有方法和屬性,可以定義一些預設的行為或屬性 2 le...
設計之禪 組合模式
回到問題的本質,為什麼新增甜品後迭代器就無法工作了?因為昨天是針對菜品實現的迭代器,而甜品是乙個子選單,並不支援菜品的某些操作 獲取 也就是它們的操作不一致導致迭代器需要作出更多複雜的判斷才能完成昨天同樣的功能。那為什麼組合模式就可以解決這個問題呢?先來看看它的定義 組合模式允許你將物件組合成樹形結...
設計模式之禪
設計模式之禪 大話面向初學者 禪面向有了一定基礎後提公升能力的讀者 看大話,只是看故事,只是感性認識,對於很多初學者而又沒專案經驗 或 閱讀 編寫量 的人來說,比較適合用於入門 看禪 主要是有一定的專案經驗 或 閱讀 編寫量 基礎上,而又大致閱讀過23種設計模式中的20種以上基本概念後,再深化提公升...