///Iterator 模式应该是最为熟悉的模式了,最简单的证明就是我在实现 Composite 模式、 Flyweight 模式、Observer 模式中就直接用到了 STL 提供的 Iterator 来遍历 Vector 或者 List 数据结构。 ///Iterator 模式也正是用来解决对一个聚合对象的遍历问题,将对聚合的遍历封装到一个 类中进行,这样就避免了暴露这个聚合对象的内部表示的可能。 void IteratorTest() { Aggregate* ag = new ConcreteAggregate(); Iterator* it = new ConcreteIterator(ag); for (; !(it->IsDone()) ; it->Next()) { cout<<it->CurrentItem()<<endl; } }
int main(int argc, char* argv[]) { Aggregate* ag = new ConcreteAggregate(); Iterator* it = new ConcreteIterator(ag); for (; !(it->IsDone()); it->Next()) { cout << it->CurrentItem() << endl; } return 0; }
void test_iterator() { Aggregate* pAg = new ConcreteAggregate(); Iterator* pItor = new ConcreteIterator(pAg); for (; !pItor->IsDone(); pItor->Next()) { std::cout << pItor->CurrentItem() << std::endl; } }
Currency CompositeEquipment::NetPrice () { Iterator<Equipment*>* i = CreateIterator(); Currency total = 0; for (i->First(); !i->IsDone(); i->Next()) { total += i->CurrentItem()->NetPrice(); } delete i; return total; }
virtual const string GetName() { string _nameList = _name; Iterator<Component*>* it = CreateIterator(); for(it->First(); !it->IsDone(); it->Next()) { _nameList += it->CurrentItem()->GetName(); } return _nameList; }
int main() { ConcreteAggregate<int> a; a.PushBack(1); a.PushBack(2); a.PushBack(3); a.PushBack(4); Iterator<int> *iter = a.CreateIterator(); iter->First(); while(iter->IsDone() == false) { std::cout << iter->CurrentItem() << std::endl; iter->Next(); } return 0; }