//迭代器模式
//现在已经基本感觉没意思了,感觉每个23钟模式围绕着前面的6个原则设计
//只是增加了示例见识,还不见得全记得住。
//估计要用的时候才会迅速找到
//不说了,要加速23钟模式;快点进入模式混合搭配,才能深刻理解
//作者把管理项目信息做了一个迭代器
//先抽象基类
class ProjectIterator;
class IProject {
public:
virtual void Add(string strname, int nnum, int ncost){}
virtual string GetProjectInfo(){ return "";}
virtual ProjectIterator* Iterator() {return NULL;}
};
//迭代器了(为了编译方便就先写迭代器了)
class ProjectIterator {
private:
deque<IProject*>* m_pdIProject;
int m_nCurentitem;
public:
ProjectIterator(deque<IProject*>* p)
: m_nCurentitem(-1) {
m_pdIProject = p;
}
//判断是否还有元素
bool HasNext() {
if (m_pdIProject->size() != m_nCurentitem+1 && m_pdIProject->at(m_nCurentitem+1)) {
return true;
}
return false;
}
IProject* Next() {
m_nCurentitem++;
return m_pdIProject->at(m_nCurentitem);
}
void remove() {}
};
//项目信息类。给了个迭代器接口
class Project : public IProject {
private:
deque<IProject*>* m_pdIProject;
string m_strName;
int m_nNum;
int m_nCost;
Project(string strname, int nnum, int ncost)
: m_strName(strname)
, m_nNum(nnum)
, m_nCost(ncost){}
public:
Project() :m_pdIProject(new deque<IProject*>){}
void Add(string strname, int nnum, int ncost) {
m_pdIProject->push_back(new Project(strname, nnum, ncost));
}
string inttochar(int a) {
char buffer[10] = {0};
_itoa_s(m_nNum, buffer, 10, 10);
string temp(buffer);
return temp;
}
string GetProjectInfo() {
string info;
info += "项目名称 " + m_strName;
info += "\n项目人数 " + inttochar(m_nNum);
info += "\n项目费用 " + inttochar(m_nCost);
info += "\n";
return info;
}
ProjectIterator* Iterator() {
ProjectIterator* p = new ProjectIterator(m_pdIProject);
return p;
}
};
class Boss {
public:
static void main() {
IProject* p_project = new Project;
p_project->Add("星球大战项目", 10, 10000);
p_project->Add("扭曲时空", 100, 10000);
p_project->Add("超人改造", 1000, 10000);
ProjectIterator* proit = p_project->Iterator();
while (proit->HasNext()) {
string str = proit->Next()->GetProjectInfo();
cout << str;
}
}
};
//这次封装特点:私有了带参数构造函数类自己调用。new了不带参数构造函数。
int _tmain(int argc, _TCHAR* argv[])
{
locale::global(locale(""));
Boss::main();
system("pause");
return 0;
}
设计模式观后(c++还原之十七 迭代器模式)
最新推荐文章于 2023-12-23 12:40:13 发布