組合模式,本質上就是樹的一種**實現。把所有節點統一化,犧牲類的清晰性來使得遍歷簡化。遍歷依靠迭代器,請參考迭代器一章。
uml圖:
composite抽象類介面如下,包含孩子節點,增加孩子節點的方法,刪除孩子節點的方法,以及操作。
public
abstract
class
composite
public
virtual
void
remove(composite composite)
public
virtual
void
operation()
}實現具體的menu和menulist,menu包含menulist,menu相當於普通節點包含menulist,而menulist是葉子節點,沒有任何孩子節點,以下是具體實現**:
public
class
menuitem : composite
public
override
void
operation()
}public
class
menu : composite
public
override
void
add(composite composite)
public
override
void
remove(composite composite)
public
iiterator createiterator()
public
override
void
operation()
}測試**:
dotapatternlibrary.composite.menu menu = new dotapatternlibrary.composite.menu("root");
for (int i = 0; i < 5; i++)
else
menu.add(menunew);}}
landpyform.form.outputresult("menu ready");
showmenu(menu);
以上是初始化選單,以及showmenu方法實現menu的遍歷,詳見完整**。
完整**:
using
system;
using
system.collections.generic;
using
system.linq;
using
system.text;
using
system.collections;
using
dotacommon;
namespace
dotapatternlibrary.composite
internal
class
arraylistiterator : iiterator
return
true;}
public
composite next()
#endregion
private
arraylist arraylist;
private
intposition;
public
arraylistiterator(arraylist arraylist)
}internal
class
arrayiterator : iiterator
return
true;}
public
composite next()
#endregion
private
ilist array;
private
intposition;
public
arrayiterator(ilist array)
}public
abstract
class
composite
public
virtual
void
remove(composite composite)
public
virtual
void
operation()
//public virtual arraylist getchild()//}
public
class
menuitem : composite
public
override
void
operation()
}public
class
menu : composite
public
override
void
add(composite composite)
public
override
void
remove(composite composite)
//public override arraylist getchild()
//public
iiterator createiterator()
public
override
void
operation()}}
DOTA版設計模式 外觀模式
外觀模式,不知道你是否會碰到這樣的場景,公司要開會了,由你負責布置會場,你需要做的工作有 1.把窗簾拉下來。2.擺好椅子。3.降下投影幕布。4.開啟投影儀。5.太煩了,有時你甚至少做了一樣,別怕,如果有了外觀模式就可以高枕無憂了。簡單的說,外觀模式就是把1 5條甚至更多的操作抽象為乙個操作,那就是 ...
DOTA版設計模式 單件模式
單件模式,單件意味著唯一,我們建立的類的例項是唯一的。唯一的處理印表機,訊息佇列,登錄檔等等.uml圖 單件模式看來簡單,其實不然。包括什麼雙重加鎖 多執行緒要求 延遲例項化等等,具體在terrylee的blog上有詳細的描述,本文不再羅嗦。單件模式沒有公開的建構函式,要實現物件的例項化只能依靠靜態...
設計模式 模版設計模式
模版設計模式的概念或者定義 定義乙個操作中演算法的框架,而將一些步驟延遲到子類中,使得子類可以不改變演算法的結構即可重定義該演算法中的某些特定步驟。以前雖然經常在專案中使用模版設計模式,特別在baseactivity,basefragement,basefragementactivity,basea...