Java設(shè)計(jì)模式之組合模式深入刨析_第1頁
Java設(shè)計(jì)模式之組合模式深入刨析_第2頁
Java設(shè)計(jì)模式之組合模式深入刨析_第3頁
Java設(shè)計(jì)模式之組合模式深入刨析_第4頁
Java設(shè)計(jì)模式之組合模式深入刨析_第5頁
已閱讀5頁,還剩2頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第Java設(shè)計(jì)模式之組合模式深入刨析目錄1.基本介紹2.結(jié)構(gòu)3.組合模式解決的問題4.組合模式解決學(xué)校院系展示5.組合模式的注意事項(xiàng)和細(xì)節(jié)

1.基本介紹

1)組合模式(CompositePattern),又叫部分整體模式,它創(chuàng)建了對(duì)象組的樹形結(jié)構(gòu),將對(duì)象組合成樹狀結(jié)構(gòu)以表示整體-部分的層次關(guān)系

2)組合模式依據(jù)樹形結(jié)構(gòu)來組合對(duì)象,用來表示部分以及整體層次

3)這種類型的設(shè)計(jì)模式屬于結(jié)構(gòu)型模式

4)組合模式使得用戶對(duì)單個(gè)對(duì)象和組合對(duì)象的訪問具有一致性,即:組合能讓客戶以一致的方式處理個(gè)別對(duì)象以及組合對(duì)象

2.結(jié)構(gòu)

組合模式主要包含三種角色:

抽象根節(jié)點(diǎn)(Component):定義系統(tǒng)各層次對(duì)象的共有方法和屬性,可以預(yù)定義一些默認(rèn)行為和屬性樹枝節(jié)點(diǎn)(Composite):定義樹枝節(jié)點(diǎn)的行為,存儲(chǔ)子節(jié)點(diǎn),組合樹枝節(jié)點(diǎn)和葉子節(jié)點(diǎn)形成一個(gè)樹形結(jié)構(gòu)葉子節(jié)點(diǎn)(Leaf):葉子節(jié)點(diǎn)對(duì)象,其下再無分支,是系統(tǒng)層次遍歷的最小單位

3.組合模式解決的問題

1)組合模式解決這樣的問題,當(dāng)我們要處理的對(duì)象可以生成一顆樹形結(jié)構(gòu),而我們要對(duì)樹上的節(jié)點(diǎn)和葉子進(jìn)行操作時(shí),它能夠提供一致的方式,而不用考慮它是節(jié)點(diǎn)還是葉子

2)對(duì)應(yīng)的示意圖

4.組合模式解決學(xué)校院系展示

1)應(yīng)用實(shí)例要求

編寫程序展示一個(gè)學(xué)校院系結(jié)構(gòu):需求是這樣的,要在一個(gè)頁面中展示出學(xué)校的院系組成,一個(gè)學(xué)校有多個(gè)學(xué)院,一個(gè)學(xué)院有多個(gè)系

2)思路分析和圖解(類圖)

3)代碼實(shí)現(xiàn)

Component組合對(duì)象聲明接口

packagecom.zte;

publicabstractclassOrganizationComponent{

privateStringname;//名字

privateStringdes;//說明

publicStringgetName(){

returnname;

publicStringgetDes(){

returndes;

protectedvoidadd(OrganizationComponentorganizationComponent){

//默認(rèn)實(shí)現(xiàn)

thrownewUnsupportedOperationException();

protectedvoidremove(OrganizationComponentorganizationComponent){

//默認(rèn)實(shí)現(xiàn)

thrownewUnsupportedOperationException();

//構(gòu)造器

publicOrganizationComponent(Stringname,Stringdes){

=name;

this.des=des;

//方法print,抽象方法

protectedabstractvoidprint();

}

Composite非葉子節(jié)點(diǎn)

packagecom.zte;

importjava.util.ArrayList;

importjava.util.List;

//University就是Composite,可以管理College

publicclassUniversityextendsOrganizationComponent{

ListOrganizationComponentorganizationComponentList=newArrayList();

//構(gòu)造器

publicUniversity(Stringname,Stringdes){

super(name,des);

//重寫add

@Override

protectedvoidadd(OrganizationComponentorganizationComponent){

organizationComponentList.add(organizationComponent);

//重寫remove

@Override

protectedvoidremove(OrganizationComponentorganizationComponent){

organizationComponent.remove(organizationComponent);

@Override

protectedvoidprint(){

System.out.println("=========="+getName()+"=========");

for(OrganizationComponentorganizationComponent:organizationComponentList){

organizationComponent.print();

@Override

publicStringgetName(){

returnsuper.getName();

@Override

publicStringgetDes(){

returnsuper.getDes();

}

Composite非葉子節(jié)點(diǎn)

packagecom.zte;

importjava.util.ArrayList;

importjava.util.List;

publicclassCollegeextendsOrganizationComponent{

//list中存放department

ListOrganizationComponentorganizationComponentList=newArrayList();

publicCollege(Stringname,Stringdes){

super(name,des);

//重寫add

@Override

protectedvoidadd(OrganizationComponentorganizationComponent){

organizationComponentList.add(organizationComponent);

//重寫remove

@Override

protectedvoidremove(OrganizationComponentorganizationComponent){

organizationComponent.remove(organizationComponent);

@Override

protectedvoidprint(){

System.out.println("=========="+getName()+"=========");

for(OrganizationComponentorganizationComponent:organizationComponentList){

organizationComponent.print();

@Override

publicStringgetName(){

returnsuper.getName();

@Override

publicStringgetDes(){

returnsuper.getDes();

}

Leaf葉子節(jié)點(diǎn)

packagecom.zte;

publicclassDepartmentextendsOrganizationComponent{

publicDepartment(Stringname,Stringdes){

super(name,des);

//add和remove方法就不需要再寫了

@Override

protectedvoidprint(){

System.out.println("==========="+getName()+"=========");

@Override

publicStringgetName(){

returnsuper.getName();

@Override

publicStringgetDes(){

returnsuper.getDes();

}

packagecom.zte;

publicclassClient{

publicstaticvoidmain(String[]args){

//創(chuàng)建大學(xué)

OrganizationComponentuniversity=newUniversity("清華大學(xué)","中國(guó)最好的大學(xué)");

//創(chuàng)建學(xué)院

OrganizationComponentcollege1=newCollege("計(jì)算機(jī)學(xué)院","計(jì)算機(jī)學(xué)院");

OrganizationComponentcollege2=newCollege("信息工程學(xué)院","信息工程學(xué)院");

//創(chuàng)建各個(gè)學(xué)院下面的系

college1.add(newDepartment("軟件工程","軟件工程"));

college1.add(newDepartment("網(wǎng)絡(luò)工程","網(wǎng)絡(luò)工程"));

college1.add(newDepartment("計(jì)算機(jī)科學(xué)與技術(shù)","老牌專業(yè)"));

college2.add(newDepartment("通信工程","通信工程"));

college2.add(newDepartment("信息工程","信息工程"));

//將學(xué)院添加到學(xué)校中

university.add(college1);

university.add(college2);

//打印大學(xué)底下的所有院系

university.print();

//打印學(xué)院底下的所有系

college1.print();

}

5.組合模式的注意事項(xiàng)和細(xì)節(jié)

1)簡(jiǎn)化客戶端操作,客戶端只需

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論