Design Pattern Iterator 迭代器設計模式

來源:互聯網
上載者:User

標籤:des   class   blog   code   java   http   

這個設計模式感覺非常簡單,我們平時寫程式的時候也是經常需要調用iterator的,C++和Java都是。

所以感覺沒什麼特別的,就是需要模仿C++或者Java的iterator類的功能吧。

這裡簡單寫個,使用C++模仿Java的iterator一些功能,呵呵。

首先我們有一個集合類,而這個集合類包含了其他類,當我們需要遍曆這個集合類包含的類的時候,就好使用iterator功能了。

比如有一個原始的類:

class SalesPerson{private:string name;string division;public:explicit SalesPerson(string n = "", string d = "") : name(n), division(d) {}string getName(){return name;}void print(){printf("SalesPerson %s is in %s department.\n", name.c_str(), division.c_str());}};

然後下面是集合類包含了上面的類:  

class Division{private:string name;SalesPerson **sales;int number;DivisionIterator *dit;int Len;public:Division(string n) : name(n), Len(100), number(0), dit(NULL){sales = new SalesPerson*[Len];for (int i = 0; i < Len; i++){sales[i] = NULL;}}~Division(){for (int i = 0; i <= number; i++){delete sales[i];}if (sales) delete [] sales;if (dit) delete dit;}string getName(){return name;}void add(string n){sales[number++] = new SalesPerson(n, name);}DivisionIterator *iterator(){if (!dit) dit = new DivisionIterator(sales);return dit;}};

上面的iterator函數就是返回DivisionIterator類,方便遍曆這個集合類裡面的類了。

class DivisionIterator{private:SalesPerson **sales;int location;int Len;public:DivisionIterator(SalesPerson **v) : sales(v), location(0), Len(100){}SalesPerson *next(){return sales[location++];}bool hasNext(){if (location < Len && sales[location]) return true;return false;}void remove()//暫時空功能{}};

最後測試其遍曆功能:

void salesIteratorTest(){Division divs("SalesDep");divs.add("Sally");divs.add("Jelly");divs.add("Lily");divs.add("Billy");divs.add("Cherry");DivisionIterator *it = divs.iterator();while (it->hasNext()) {SalesPerson *sa = it->next();sa->print();}}

結果:



遍曆功能是沒問題的,這個設計模式運用成功,很簡單。

不過最鬱悶的不是這個設計模式,而是Flyweight設計模式,感覺就是一個簡單的功能函數也歸結為一個設計模式,也許我學的還不是很透切吧。

總體來說設計模式還是很有用的,目前正在運用設計模式寫架構呢,寫成了拿出來show show。或者做成開源項目了。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.