国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

設計模式c#語言描述——合成(Composite)模式

2024-07-21 02:19:27
字體:
來源:轉載
供稿:網友
設計模式c#語言描述——合成(composite)模式



*本文參考了《java與模式》的部分內容,適合于設計模式的初學者。



合成模型模式屬于對象的結構模式,有時又叫做部分-整體模式。合成模式將對象組織到樹結構中,可以用來描述整體與部分的關系。合成模式可以使客戶端將單純元素與復合元素同等看待。如文件夾與文件就是合成模式的典型應用。根據模式所實現接口的區別,合成模式可分為安全式和透明式兩種。



安全式的合成模式要求管理聚集的方法只出現在樹枝構件類中,而不出現在樹葉構件類中。類圖如下所示:


涉及到三個角色:



抽象構件(component):這是一個抽象角色,它給參加組合的對象定義公共的接口及其默認的行為,可以用來管理所有的子對象。合成對象通常把它所包含的子對象當做類型為component的對象。在安全式的合成模式里,構件角色并不定義出管理子對象的方法,這一定義由樹枝構件對象給出。

樹葉構件(leaf):樹葉對象是沒有下級子對象的對象,定義出參加組合的原始對象的行為。

樹枝構件(composite):代表參加組合的有下級子對象的對象。樹枝構件類給出所有的管理子對象的方法,如add(),remove()等。



component:

public interface component

{

void sampleoperation();



}// end interface definition component



leaf:

public class leaf : component

{

public void sampleoperation()

{

}

}// end class definition leaf



composite:

public class composite :component

{

private arraylist componentlist=new arraylist();



public void sampleoperation()

{

system.collections.ienumerator myenumerator = componentlist.getenumerator();

while ( myenumerator.movenext() )

{

((component)myenumerator.current).sampleoperation();

}

}



public void add(component component)

{

componentlist.add (component);

}



public void remove(component component)

{

componentlist.remove (component);

}



}// end class definition composite



與安全式的合成模式不同的是,透明式的合成模式要求所有的具體構件類,不論樹枝構件還是樹葉構件,均符合一個固定的接口。類圖如下所示:




抽象構件(component):這是一個抽象角色,它給參加組合的對象定義公共的接口及其默認的行為,可以用來管理所有的子對象。要提供一個接口以規范取得和管理下層組件的接口,包括add(),remove()。

樹葉構件(leaf):樹葉對象是沒有下級子對象的對象,定義出參加組合的原始對象的行為。樹葉對象會給出add(),remove()等方法的平庸實現。

樹枝構件(composite):代表參加組合的有下級子對象的對象。定義出這樣的對象的行為。



component:

public interface component

{

void sampleoperation();



void add(component component);



void remove(component component);



}// end interface definition component



leaf:

public class leaf : component

{

private arraylist componentlist=null;



public void sampleoperation()

{



}

public void add(component component)

{



}

public void remove(component component)

{



}

}// end class definition leaf



composite:

public class composite :component

{



private arraylist componentlist=new arraylist();



public void sampleoperation()

{

system.collections.ienumerator myenumerator = componentlist.getenumerator();

while ( myenumerator.movenext() )

{

((component)myenumerator.current).sampleoperation();

}

}



public void add(component component)

{

componentlist.add (component);

}



public void remove(component component)

{

componentlist.remove (component);

}



}// end class definition composite



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 台湾省| 偏关县| 东宁县| 扬中市| 宣化县| 嘉善县| 藁城市| 聂荣县| 浑源县| 安福县| 彰化县| 潮安县| 边坝县| 霍城县| 余姚市| 龙井市| 漠河县| 古浪县| 宽甸| 汉源县| 砀山县| 莫力| 清水河县| 鹤庆县| 阜平县| 肥西县| 大埔县| 红河县| 曲麻莱县| 延寿县| 五河县| 任丘市| 崇仁县| 依安县| 陇南市| 上饶县| 陕西省| 汽车| 嘉定区| 甘肃省| 司法|