公司的火影手游项目美术资源还没有到位,所有最近闲着没事在看C++的设计模式。虽然现在工作一直在用unity3d下写C#脚本,但是一直以来对C++的情有独钟让我坚持用C++的角度去看待软件开发。设计模式可以看作是算法,是前人大量的软件工程的经验总结。回顾自己1年半多的工作经历,发现C++的设计模式基本上都在工程中用到了一遍,为此感觉自己有必要写点东西记录下这些感想。
Build模式在Gof书有描述,属于创建性模型(这次比较专业哈)。
模式中三剑客:建造者(Build) , 具体建造者(ConcreteBuild), 指导者(Drector)
贴下简单的代码:
建造者:
#ifndef _READ_H_
#define _READ_H_
class Read
{
public:
virtual void BuildA() = 0;
virtual void BuildB() = 0;
virtual void BuildC() = 0;
Read(){}
};
#endif
具体建造者类:
Header
#ifndef _XMLREAD_H_
#define _XMLREAD_H_
#include "Read.h"
class XMLRead : public Read
{
public:
void BuildA();
void BuildB();
void BuildC();
XMLRead();
};
#endif
Cpp
#include "HTMLRead.h"
#include <iostream>
using std::cout;
using std::endl;
HTMLRead::HTMLRead(){}
void HTMLRead::BuildA()
{
cout<<"HTMLBuildA\n";
}
void HTMLRead::BuildB()
{
cout<<"HTMLBuildB\n";
}
void HTMLRead::BuildC()
{
cout<<"HTMLBuildC\n";
}
指导者
:
Header:
#ifndef _DRECTER_H_
#define _DRECTER_H_
#include "Read.h"
class Drecter
{
public:
Drecter(){}
void SetRead(Read* pRead)
{
m_pRead = pRead;
}
void ReadBegin()
{
m_pRead->BuildA();
m_pRead->BuildB();
m_pRead->BuildC();
}
private:
Read* m_pRead;
};
#endif
Main函数
#include "HTMLRead.h"
#include "XMLRead.h"
#include "Drecter.h"
#include <iostream>
using namespace std;
int main()
{
Drecter obj;
obj.SetRead(new XMLRead);
obj.ReadBegin();
system("pause");
return 0;
}
运行结果