作者: xuanner 发布日期: 2007-8-23 20:54:41 Email:chenxuan5627@163.com
---------------------------------------------------------------------------------------------------------------
(原创作品,转载请保留作者著作信息)

用处:Builder模式要解决的也正是这样的问题:当我们要创建的对象很复杂的时候(通常是由很多其他的对象组合而成),我们要要复杂对象的创建过程和这个对象的表示(展示)分离开来,这样做的好处就是通过一步步的进行复杂对象的构建,由于在每一步的构造过程中可以引入参数,使得经过相同的步骤创建最后得到的对象的展示不一样。
生活中的Builder:Builder模式的创建,学校本来就是一个Builder的很好体验,学校就是一个复杂的对象,
学校提供给新生注册的一些资料,比如Name、Age、Sex.....学生去注册就得到了这些资料,
也即学生继承了这些属性,学校对某一个学生的注册有了记录,可以随时找到哪个学生的信息,
这就是生活中Builder模式的体验。
代码实现:University.h、University.cpp、Registe.h、Registe.cpp、Student.h、Student.cpp、MainBuilder.cpp
//University.h
#ifndef UNIVERSITY_H_
#define UNIVERSITY_H_ 100
class Registe;
class University
...{
public:
University(Registe *reg);
~University();
void getProp();
protected:
private:
Registe *reg;
};
#endif
//University.cpp
#include "University.h"
#include "Registe.h"
University::University(Registe *reg)
...{
this->reg = reg;
}
void University::getProp()
...{
reg->getName();
reg->getAge();
reg->getSex();
}
University::~University()
...{
}
//Registe.h及Student.h
#ifndef REGISTE_H_
#define REGISTE_H_ 100
class Registe
...{
public:
virtual void getName()=0;
virtual void getAge()=0;
virtual void getSex()=0;
Registe();
~Registe();
protected:
private:
};
class Student : public Registe
...{
public:
Student();
~Student();
void getName();
void getAge();
void getSex();
};
#endif
//Registe.cpp及Student.cpp的实现
#include "Registe.h"
#include <iostream>
using namespace std;
Registe::Registe()
...{
}
Registe::~Registe()
...{
}


/**//** 学生去注册,可以得到注册名、年龄、性别、
*
*/
Student::Student()
...{
}
Student::~Student()
...{
}
void Student::getAge()
...{
cout << "the getAge() is invoked!!" << endl;
}
void Student::getName()
...{
cout << "the getName() is invoked!!" << endl;
}
void Student::getSex()
...{
cout << "the getSex() is invoked!!" << endl;
}
//MainBuilder.cpp
/**//*
Builder模式的创建,学校本来就是一个Builder的很好体验,学校就是一个复杂的对象,
学校提供给新生注册的一些资料,比如Name、Age、Sex.....学生去注册就得到了这些资料,
也即学生继承了这些属性,学校对某一个学生的注册有了记录,可以随时找到哪个学生的信息,
这就是生活中Builder模式的体验。
*/
#include "University.h"
#include "Registe.h"
int main()
...{
University *university = new University(new Student());
university->getProp();
return 0;
}
2254

被折叠的 条评论
为什么被折叠?



