版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025-2030物聯(lián)網(wǎng)平臺(tái)應(yīng)用場(chǎng)景適用性用戶體驗(yàn)隱私保護(hù)行業(yè)競(jìng)爭(zhēng)標(biāo)準(zhǔn)化
- 2025-2030物流行業(yè)自動(dòng)化設(shè)備應(yīng)用與倉(cāng)儲(chǔ)布局優(yōu)化及效率提升研究
- 市場(chǎng)營(yíng)銷策劃方案與執(zhí)行策略解析
- 幼兒園幸福拍手歌教學(xué)方案
- 中學(xué)英語單元知識(shí)總結(jié)與復(fù)習(xí)方案
- 智慧醫(yī)療信息系統(tǒng)安全管理方案
- 高校教師績(jī)效考核及培訓(xùn)計(jì)劃方案
- 小學(xué)五年級(jí)英語聽說訓(xùn)練課教學(xué)方案
- 學(xué)生腿部皮膚護(hù)理方案
- 白酒市場(chǎng)操作方案
- 《實(shí)踐論》《矛盾論》導(dǎo)讀課件
- 中試基地運(yùn)營(yíng)管理制度
- 老年病康復(fù)訓(xùn)練治療講課件
- DB4201-T 617-2020 武漢市架空管線容貌管理技術(shù)規(guī)范
- 藥品追溯碼管理制度
- 腳手架國(guó)際化標(biāo)準(zhǔn)下的發(fā)展趨勢(shì)
- 購(gòu)銷合同范本(塘渣)8篇
- 生鮮業(yè)務(wù)采購(gòu)合同協(xié)議
- GB/T 4340.2-2025金屬材料維氏硬度試驗(yàn)第2部分:硬度計(jì)的檢驗(yàn)與校準(zhǔn)
- 銷售合同評(píng)審管理制度
- 資產(chǎn)評(píng)估員工管理制度
評(píng)論
0/150
提交評(píng)論