Design Pattern Iterator 迭代器设计模式
2014-06-25 16:13
357 查看
这个设计模式感觉非常简单,我们平时写程序的时候也是经常需要调用iterator的,C++和Java都是。
所以感觉没什么特别的,就是需要模仿C++或者Java的iterator类的功能吧。
这里简单写个,使用C++模仿Java的iterator一些功能,呵呵。
首先我们有一个集合类,而这个集合类包含了其他类,当我们需要遍历这个集合类包含的类的时候,就好使用iterator功能了。
比如有一个原始的类:
然后下面是集合类包含了上面的类:
上面的iterator函数就是返回DivisionIterator类,方便遍历这个集合类里面的类了。
最后测试其遍历功能:
结果:
遍历功能是没问题的,这个设计模式运用成功,很简单。
不过最郁闷的不是这个设计模式,而是Flyweight设计模式,感觉就是一个简单的功能函数也归结为一个设计模式,也许我学的还不是很透切吧。
总体来说设计模式还是很有用的,目前正在运用设计模式写框架呢,写成了拿出来show show。或者做成开源项目了。
所以感觉没什么特别的,就是需要模仿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。或者做成开源项目了。
相关文章推荐
- Design Pattern Iterator 迭代器设计模式
- 设计模式Iterator(迭代器) (转载)
- 设计模式之Iterator (迭代器)
- 设计模式示例四 Observer(观察者)和Iterator(迭代器)
- 【设计模式基础】行为模式 - 7 - 迭代器(Iterator)
- 设计模式之 迭代器(Iterator)----对象行为型模式
- 设计模式C++描述----20.迭代器(Iterator)模式
- 设计模式----Iterator(迭代器)模式
- Java设计模式—迭代器(Iterator)
- STL中迭代器(iterator)的设计模式
- 设计模式之迭代器(Iterator Pattern)-笔记
- Java设计模式—迭代器(Iterator)
- [断断续续,瞎掰胡扯]我的设计模式-Iterator(迭代器)
- Head First 设计模式 (九) 迭代器与组合模式(Iterator & Composite pattern) C++实现
- 设计模式学习—Iterator(迭代器)
- 浅学设计模式之迭代器<Iterator>模式
- C++设计模式之十六:Iterator 迭代器
- 浅学设计模式之迭代器<Iterator>模式
- Java设计模式—迭代器(Iterator)
- 设计模式 -- Iterator(迭代器)