您的位置:首页 > 其它

Iterator模式

2017-05-03 00:00 148 查看
摘要: 设计模式-Iterator模式

//Iterator模式
typedef int Type;
class Iterater
{
public:
Iterater(){}
virtual ~Iterater(){}
virtual bool HasNext()=0;
virtual Type Next()=0;
};
class Container
{
public:
Container(){}
virtual ~Container(){}
public:
virtual Iterater* GetIterator()=0;
virtual int GetSize()=0;
virtual Type GetItem(int index)=0;
};

class ConcreateIterater: public Iterater
{
public:
ConcreateIterater(Container* pContainer):m_pContainer(pContainer),m_nIndex(0){}
virtual ~ConcreateIterater(){}
public:
virtual bool HasNext()
{
if (m_nIndex<m_pContainer->GetSize())
{
return true;
}
else
{
return false;
}
}
virtual Type Next()
{
if (HasNext())
{
return m_pContainer->GetItem(m_nIndex++);
}
else
{
return (Type)(-1);
}
}
private:
Container  *m_pContainer;
int            m_nIndex;
};

class ConcreateContainer: public Container
{
public:
//friend class ConcreateIterater;
ConcreateContainer(int nSize)
{
m_nSize=nSize;
m_pData=new Type[m_nSize];
}
virtual ~ConcreateContainer()
{
if (m_pData)
{
delete[]m_pData;
m_pData=nullptr;
}
}

Iterater* GetIterator()
{
return new ConcreateIterater(this);
}
int GetSize()
{
return m_nSize;
}

Type GetItem(int index)
{
return m_pData[index];
}
private:
size_t m_nSize;
Type *m_pData;
};
//Iterator模式

int _tmain(int argc, _TCHAR* argv[])
{
Container *pc=new ConcreateContainer(100);
Iterater *pIt=pc->GetIterator();
for (;pIt->HasNext();)
{
Type value=pIt->Next();
printf("%d\n",value);
}
delete pc;
delete pIt;
getchar();
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息