上篇我们讲了外观模式,这篇我们再来看看迭代器模式,这也是一种使用频率很高的模式。通常的数据存储聚合类中,既包括数据存储的功能又包括对这些数据遍历的功能,而要修改聚合类,既得修改数据存储又得修改遍历功能,非常繁琐,也不符合单一职责原则。迭代器模式的核心思想是将数据存储和数据遍历分开,让数据遍历的方法单独组成一个迭代器的类,基本架构:一个抽象聚合类(包括数据存储和抽象遍历类),一个具体聚合类(包括数据存储和具体遍历类),一个抽象遍历类,一个具体遍历类。这样当我们有新的产品需求如添加一个新的具体聚合类的时候,我们只需要添加一个具体遍历类和具体的聚合类,符合开闭原则。
以下是代码示例:
#pragma once
#include <List>
using namespace std;
typedef list<int> LISTINT;
class baseIterator//抽象迭代器
{
public://抽象迭代器里的基本遍历方法
void nextObject();
void preObject();
void lastObject();
void firstObject();
};
class basePact//抽象产品类
{
private :
LISTINT mList;
public :
//数据存储基本方法
basePact(LISTINT);
void addObject(int);
void removeObject(int);
LISTINT getList();
virtual baseIterator* createIterator()//抽象迭代器
{return new baseIterator();}
};
class ProductPact: public basePact//具体产品类
{
public :
baseIterator* createIterator()
{return new realIterator();}//具体迭代器
};
class realIterator :public baseIterator//具体迭代器
{
private:
ProductPact* m_product;
public:
};