手機網(wǎng)站如何做新區(qū)快速seo排名
文章目錄
- 前言
- 一、介紹
- 二、詳細分析
- 1.核心組成
- 2.實現(xiàn)步驟
- 3.代碼示例
- 4.優(yōu)缺點
- 優(yōu)點
- 缺點
- 5.使用場景
- 總結(jié)
前言
組合模式是將對象組合成樹形結(jié)構(gòu)來表現(xiàn)"整體/部分"層次結(jié)構(gòu),可以更好的實現(xiàn)管理操作。
一、介紹
組合設(shè)計模式又叫部分整體模式,將對象組合成樹形結(jié)構(gòu)來表現(xiàn)"整體/部分"層次結(jié)構(gòu),可以更好的實現(xiàn)管理操作。使用戶可以通過一致的方法操作單個對象或組合對象,整體和部分的基本操作多數(shù)都是一樣的,也會有不同的地方。組合模式可以用一棵樹來表示。
二、詳細分析
1.核心組成
- 組合部件(Component):它是一個抽象接口,表示樹根;
- 合成部件(Composite):和組合部件類似,也有自己的子節(jié)點;
- 葉子(Leaf):在組合中表示子節(jié)點對象,注意他是沒有子節(jié)點。
公司底下有部門,部門底下有職位。以下所示:
2.實現(xiàn)步驟
- 創(chuàng)建組合部件,他是個抽象類,定義部件中的屬性和方法;
- 創(chuàng)建合成部件,繼承組合部件,創(chuàng)建集合屬性,用來管理葉子節(jié)點;
- 創(chuàng)建葉子節(jié)點,繼承組合部件,不能添加子節(jié)點。
3.代碼示例
組合部件
/*** 組合部件*/
public abstract class Company {private String job;public Company(String job) {this.job = job;}public String getJob() {return job;}public void setJob(String job) {this.job = job;}/*** 添加職位*/protected abstract void addJob(Company company);/*** 刪除職位*/protected abstract void removeJob(Company company);/*** 展示職位* @param depth 顯示層級*/protected abstract void display(int depth);}
合成部件
/*** 合成部件*/
public class Department extends Company {List<Company> companyList = new ArrayList<Company>();public Department(String job) {super(job);}@Overrideprotected void addJob(Company company) {companyList.add(company);}@Overrideprotected void removeJob(Company company) {companyList.remove(company);}@Overrideprotected void display(int depth) {StringBuffer str= new StringBuffer();for (int i=0;i<depth;i++){str.append("-");}// 輸出System.out.println(str.toString()+this.getJob());//子層級再加2for (Company company:companyList){company.display(depth+2);}}}
葉子節(jié)點
/*** 葉子節(jié)點*/
public class Job extends Company{public Job(String job) {super(job);}@Overrideprotected void addJob(Company company) {}@Overrideprotected void removeJob(Company company) {}@Overrideprotected void display(int depth) {StringBuffer str= new StringBuffer();for (int i=0;i<depth;i++){str.append("-");}// 輸出System.out.println(str.toString()+this.getJob());}
}
測試類:
public static void main(String[] args) {// 創(chuàng)建根Company company = new Department("北京公司");// 創(chuàng)建部門節(jié)點Company dept = new Department("軟件開發(fā)部門");Company dept2 = new Department("軟件測試部門");Company dept3 = new Department("產(chǎn)品部門");// 創(chuàng)建葉子節(jié)點并添加至部門Company job= new Job("軟件開發(fā)經(jīng)理");Company job1 = new Job("軟件開發(fā)工程師");dept.addJob(job);dept.addJob(job1);Company job2 = new Job("軟件測試工程師");dept2.addJob(job2);Company job3 = new Job("產(chǎn)品經(jīng)理");dept3.addJob(job3);company.addJob(dept);company.addJob(dept2);company.addJob(dept3);company.display(0);}
結(jié)果
4.優(yōu)缺點
優(yōu)點
- 組合模式定義了一組統(tǒng)一的接口,可以用來處理單個對象和組合對象,從而簡化了客戶端代碼;
- 組合模式使得可以很自然地將對象和它們的行為組織在一起,提高了代碼的內(nèi)聚性;
- 新增加的葉節(jié)點類型或樹枝節(jié)點類型可以無縫集成到現(xiàn)有系統(tǒng)中,無需修改現(xiàn)有代碼;
- 組合模式使得對象的添加和刪除變得容易,因為它們可以統(tǒng)一地被添加到樹形結(jié)構(gòu)中。
缺點
- 客戶端需要花更更多時間理理清類之間的層次關(guān)系;
- 組合模式要求所有葉子節(jié)點和樹枝節(jié)點都實現(xiàn)相同的接口,這可能限制了對象的靈活性。
5.使用場景
- 當想表達對象的部分-整體的層次結(jié)構(gòu),比如公司結(jié)構(gòu)、菜單、文件夾等等;
- 當我們的要處理的對象可以生成一顆樹形結(jié)構(gòu),我們要對樹上的節(jié)點和葉子進行操作時,它能夠提供一致的方式,而不用考慮它是節(jié)點還是葉子。
總結(jié)
以上就是本篇的內(nèi)容,本文簡單介紹了組合模式的組成、優(yōu)缺點、使用場景等,提供了代碼示例。