DOTA版設計模式 組合

2022-02-22 20:23:37 字數 2792 閱讀 2531

組合模式,本質上就是樹的一種**實現。把所有節點統一化,犧牲類的清晰性來使得遍歷簡化。遍歷依靠迭代器,請參考迭代器一章。

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...