一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

組合模式(Composite)解析例子

 靜聽沙漏 2012-03-01
組合模式屬于結(jié)構(gòu)型模式,其意圖是將對象組合成樹形結(jié)構(gòu)以表示部分-整體的層次結(jié)構(gòu),composite模式使得用戶對單個對象和組合對象的使用具有一致性。Composite模式的一個重要思想是遞歸組合,關(guān)鍵是一個抽象類,它既可以代表組合對象,又可以代表一個被組合的對象。經(jīng)常在Java開發(fā)中遇到的容器就使用了組合模式,一方面組件可以放在容器中,另一方面容器也可以作為組件放在另外的容器中。
實用性:
l 你想表示對象的部分-整體層次結(jié)構(gòu)
l 你希望用戶忽略組合對象與單個對象的不同,用戶同意地使用組合結(jié)構(gòu)中的所有對象。
參與者:
Component
為組合中的對象聲明接口。
在適當?shù)那闆r下,實現(xiàn)所有類共有接口的缺省行為。
聲明一個接口用于訪問和管理Componebt 的子組件。
在遞歸結(jié)構(gòu)中定義一個接口,用于訪問一個父組件,并在合適的情況下實現(xiàn)。
Leaf
在組合中表示葉節(jié)點對象,葉節(jié)點對象沒有子節(jié)點。
在組合中定義圖元對象的行為。
Composite
定義有子部件的那些部件的行為
存儲子部件,
Component接口中實現(xiàn)與子部件有關(guān)的操作。
Client
通過Component接口操縱組合部件的對象。
其協(xié)作過程是:用戶使用Compoment類接口與組合結(jié)構(gòu)中的對象進行交互。如果接受者是一個葉節(jié)點,則直接處理請求。如果接受者是Composite,它通常將請求發(fā)送給他的字部件,在轉(zhuǎn)發(fā)請求之前或者之后可能執(zhí)行一些輔助操作。
在本例子中,沒有什么特殊之處,所不同的是Composite可以容納Component的子類對象,包括本身。例子本省也比較簡單,平淡無味,單卻可以在特定的場景能很好的解決特定的問題。
使用組合模式有如下的好處:
l 定義了飽含基本對象和組合對象的類層次結(jié)構(gòu),基本對象可以被組合成更復(fù)雜的組合對象,而這個組合對象有可以被組合。
l 簡化客戶代碼 客戶可以一直地使用組合結(jié)構(gòu)和單個對象,通常用戶不知道處理的是一個葉節(jié)點還是一個組合組件。
l 使得更容易增加新類型的組件, 新定義的Compositeleaf子類自動地與義有的結(jié)構(gòu)和客戶代碼一起工作,客戶程序不需要因為新的Component類而改變。
l 使你的設(shè)計變得更一般化。
實現(xiàn)的代碼:
Component接口:
package composite;
public interface Component{
public int getSize();
public int getChildNum();
public String getType();
public String getName();
public void add(Component c);
public void remove(Component c);
}
Leaf類:
package composite;
public class Leaf implements Component{
private int size;
private String name;
public Leaf(String aName,int aSize){
size = aSize;
name = aName;
}
public String getName(){
return name;
}
public String getType(){
return "Leaf";
}
public int getSize(){
return size;
}
public int getChildNum(){
return 1;
}
public void add(Component c){
System.err.println("Not supported method!");
}
public void remove(Component c){
System.err.println("Not supported method!");
}
}
Composite類:
package composite;
public class Leaf implements Component{
private int size;
private String name;
public Leaf(String aName,int aSize){
size = aSize;
name = aName;
}
public String getName(){
return name;
}
public String getType(){
return "Leaf";
}
public int getSize(){
return size;
}
public int getChildNum(){
return 1;
}
public void add(Component c){
System.err.println("Not supported method!");
}
public void remove(Component c){
System.err.println("Not supported method!");
}
}
客戶端代碼:
package composite;
public class Client{
public static void main(String[] args){
Component root = new Composite("root");
Component composite = new Composite("composite");
Component leaf1 = new Leaf("leaf1",20);
Component leaf2 = new Leaf("leaf2",40);
root.add(leaf1);
composite.add(leaf2);
root.add(composite);
String str = "Leaf1's size is "+leaf1.getSize();
str += "\nleaf2's size is " + leaf2.getSize();
str += "\nComposite's size is " + composite.getSize();
str += "\nRoot's size is " + root.getSize();
System.out.println(str);
}
}
總結(jié):組合模式在 解決整體與部分 的問題中 應(yīng)用比較廣泛,一個組合也可以被看作 部分來處理,降低了處理問題的難度。

本文出自 “凌輝” 博客,請務(wù)必保留此出處http://tianli.blog.51cto.com/190322/34416

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    亚洲欧洲成人精品香蕉网| 国产成人精品一区二三区在线观看| 成人你懂的在线免费视频| 国产精品激情在线观看| 真实国产乱子伦对白视频不卡| 国产精品亚洲精品亚洲| 色综合久久中文综合网| 一区二区三区亚洲天堂| 亚洲中文字幕视频一区二区| 白白操白白在线免费观看| 亚洲一区二区三区在线中文字幕| 欧美区一区二在线播放| 成人精品日韩专区在线观看| 欧美成人黄色一级视频| 精品国产亚洲一区二区三区| 欧美尤物在线视频91| 果冻传媒在线观看免费高清| 欧美日韩亚洲精品在线观看| 99久久精品免费精品国产| 国产爆操白丝美女在线观看| 正在播放国产又粗又长| 国产乱久久亚洲国产精品| 91免费精品国自产拍偷拍| 日韩欧美中文字幕人妻| 欧美人妻一区二区三区| 精品少妇人妻av一区二区蜜桃| 麻豆在线观看一区二区| 亚洲欧洲一区二区中文字幕| 免费特黄一级一区二区三区| 乱女午夜精品一区二区三区| 最近中文字幕高清中文字幕无| 午夜色午夜视频之日本| 日本少妇三级三级三级| 午夜福利黄片免费观看| 丝袜诱惑一区二区三区| 国产精品内射视频免费| 男人和女人干逼的视频| 成人精品一级特黄大片| 欧美一级黄片欧美精品| 欧美日韩亚洲精品在线观看| 国产午夜福利在线观看精品|