設計模式 迭代器和組合模式

2021-06-29 00:39:55 字數 3604 閱讀 7547

另外做為迭代器,首先你要獲取資料(構造方法),你至少要有最小的執行單位,乙個是next()來獲取下乙個資料,那隨之而來就需要判斷下乙個是否存在,需要hasnext()方法,再加remove()方法。並且聚合物件要實現迭代器介面,這樣客戶端就可以針對介面程式設計,還要需要返回乙個迭代器方法,把聚合物件傳入進去。

看下定義,迭代器模式:提供一種方法順序訪問乙個聚合物件中的各個元素,而又不暴露其內部的表示。

方法就是next()和hasnext()方法。

這裡涉及乙個原則,乙個類應該只有乙個引起變化的原因。

}組合模式

想象一下這樣乙個場景,餐單,裡面有時不僅包含餐點,同時也包含其他餐單,而這餐單裡又包含了同樣的餐單。這是一種樹形結構(組合結構),使用這種結構,我們能把相同的操作應用在組合和個別物件中。

概念,組合物件中,有根(最上層的餐單元件),結點(選單元件),葉子(選單項)的概念。

看下定義:組合模式:允許你將物件組合成樹形結構來表現」整體/部分」層次結構,組合能讓客戶以一致的方式處理個別物件以及物件組合。

看類圖就明白了

通過葉子和結點同實現共同的介面來實現。在高層抽象類定義所需的方法。

這裡的難點是怎麼遍歷選單組下面所有的元素。

兩種方法:

1.通過遞迴,共同實現同乙個方法,不論是葉子還是結點,通過呼叫自身來遍歷所有。

2.通過實現外部迭代器,通過對迭代器進行操作來代替對鍊錶的直接操作。

**:

public

class

compositeiterator

implements

iterator

@override

public

boolean

hasnext() elseelse}}

@override

public object next()

return component;

}else

}@override

public

void

remove()

}

例子**

最頂層抽象類

public

abstract

class

menucomponent

public

void

remove(menucomponent component)

public string getname()

public string getdescription()

public

double

getprice()

public

boolean

isvegetarian()

public

void

print()

public iterator createiterator()

}選單組(結點)

public

class

menu

extends

menucomponent

public

void

add(menucomponent component)

public

void

remove(menucomponent component)

public string getname()

public string getdescription()

public

void

print()

}public iterator createiterator()}葉子

public

class

menuitem

extends

menucomponent

public string getname()

public string getdescription()

public

boolean

isvegetarian()

public

double

getprice()

public

void

print()

system.out.println(", " + getprice());

system.out.println(" --" + getdescription());

}}客戶端

public

class

waitress

public

void

printmenu()

public

void

printvegetariarianmenu()

} catch (exception e) }}

}public

class

menutestdrive

}

設計模式 迭代器和組合模式

給餐廳選單加入乙個迭代器 public inte ce iterator boolean hasnext object next public class dinermenuiterator implements iterator menuitem items int position 0 publ...

設計模式之迭代器和組合模式

迭代器模式 1 簡介 迭代器模式提供一種方法訪問乙個聚合物件中的各個元素,而 不暴露其內部實現方式。1 它讓我們能夠遊走在各種聚合型別資料的每乙個元素之間,而有無需讓大家知道遊走的什麼型別的聚合,反正都能夠達到迴圈輸出元素的目的。2 它能夠把遊走的任務搬到迭代器上,而不再使用各種適合自己聚合型別的f...

設計模式 狀態模式組合模式迭代器模式

狀態模式 將物件的轉換封裝在內部組合模式 元件在內部具有特定的資料結構 使用者操作 但是不想讓得知內部的實施細節 使用者對元件的內部的物件操作 使用者操作乙個物件多型呼叫 執行時依賴 編譯是確定型別 編譯時多型 大作業的時候要求加入這個的理解 效能較好迭代器模式 獲得當前的元素 下乙個元素 開頭是否...