作者: 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
#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()
... {
}
#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
#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;
}
#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;
}
/**/ /*
Builder模式的创建,学校本来就是一个Builder的很好体验,学校就是一个复杂的对象,
学校提供给新生注册的一些资料,比如Name、Age、Sex.....学生去注册就得到了这些资料,
也即学生继承了这些属性,学校对某一个学生的注册有了记录,可以随时找到哪个学生的信息,
这就是生活中Builder模式的体验。
*/
#include " University.h "
#include " Registe.h "
int main()
... {
University *university = new University(new Student());
university->getProp();
return 0;
}