Beispiel #1
0
///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;
}
Beispiel #3
0
void test_iterator()
{
	Aggregate* pAg = new ConcreteAggregate();
	Iterator* pItor = new ConcreteIterator(pAg);
	for (; !pItor->IsDone(); pItor->Next())
	{
		std::cout << pItor->CurrentItem() << std::endl;
	}
}
Beispiel #4
0
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;
    }
Beispiel #6
0
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;
}