迭代器模式
迭代器提供一种方法来访问聚合对象,而不用暴露这个对象的内部表示,其别名为游标。
迭代器模式一般包含Iterator(抽象迭代器)、Conretelterator(具体迭代器)、Aggregate(抽象聚合类)和ConcreteAggregate(具体聚合类)。
迭代器模式实例之电视机遥控器
由类图可以看出,具体Tevelvison类依赖注入具体迭代器,在createiterator函数生成指定的具体迭代器。
在c++版本中,内部类不能直接访问外部类的成员函数,所以需要传具体聚合类的内部数据的存储地址,供迭代器访问,所以类图中的具体迭代器还需要关联具体聚合类。
下面的是c++版本的实现,相对于书上java版本的实现有所改动。
(由于Skyworth和TCL的内部实现基本一致,所以下面只示例了Skyworth)
抽象迭代器类TVIterator
//抽象迭代器类TVIterator
class TVIterator{
public:
virtual void setChannel(int i) = 0;
virtual void next() = 0;
virtual void previous() = 0;
virtual bool isLast() = 0;
virtual string currentChannel() = 0;
virtual bool isFirst() = 0;
};
抽象聚合类Television