c++设计模式--建造者模式

来源:互联网 发布:程序员应届生个人简历 编辑:程序博客网 时间:2024/06/09 23:42

// BuilderPattern.cpp : 定义控制台应用程序的入口点。
//通过此例程了解设计模式里的“建造者模式”



#include "stdafx.h"#include <stdlib.h>#include <iostream>using namespace std; //抽象类,用来安排创建人的具体流程,其他类必须遵循这个流程,但是可以自己具体实现class CPersonBuilder{public: virtual void BuildHead()=0; virtual void BuildBody()=0; virtual void BuildArmLeft()=0; virtual void BuildArmRight()=0; virtual void BuildLegLeft()=0; virtual void BuildLegRight()=0;}; //创建瘦子的类class CThinPersonBuilder:public CPersonBuilder{public: CThinPersonBuilder() {  cout<<"is creating thin person "<<endl<<endl; } ~CThinPersonBuilder() {  cout<<"is finished for thin person"<<endl<<endl; }public: void BuildHead() {  cout<<"BuildHead"<<endl; } void BuildBody() {  cout<<"BuildBody(thin)"<<endl; } void BuildArmLeft() {  cout<<"BuildArmLeft"<<endl; } void BuildArmRight() {  cout<<"BuildArmRight"<<endl; } void BuildLegLeft() {  cout<<"BuildLegLeft"<<endl; } void BuildLegRight() {  cout<<"BuildLegRight"<<endl; }}; //创建胖子的类class CFatPersonBuilder:public CPersonBuilder{public: CFatPersonBuilder() {  cout<<"is creating fat person"<<endl; } ~CFatPersonBuilder() {  cout<<"is finished for fat person"<<endl; }public: void BuildHead() {  cout<<"BuildHead"<<endl; } void BuildBody() {  cout<<"BuildBody(Fat)"<<endl; } void BuildArmLeft() {  cout<<"BuildArmLeft"<<endl; } void BuildArmRight() {  cout<<"BuildArmRight"<<endl; } void BuildLegLeft() {  cout<<"BuildLegLeft"<<endl; } void BuildLegRight() {  cout<<"BuildLegRight"<<endl; }}; //指挥者类,用来指挥创建的人是瘦子还是胖子class CPersonDirector{public: CPersonDirector(CPersonBuilder *p) {  this->m_p=p; } const void CreatePerson(void) const {  m_p->BuildHead();  m_p->BuildBody();  m_p->BuildArmLeft();  m_p->BuildArmRight();  m_p->BuildLegLeft();  m_p->BuildLegRight(); }private: CPersonBuilder *m_p;};   int _tmain(int argc, _TCHAR* argv[]){ cout<<"---------建造者模式测试案例------------------------"<<endl<<endl;  CThinPersonBuilder *p_tp=new CThinPersonBuilder(); CPersonDirector *p_dtp=new CPersonDirector(p_tp); p_dtp->CreatePerson(); delete p_tp; delete p_dtp; p_tp=NULL; p_dtp=NULL; cout<<endl<<endl; CFatPersonBuilder *p_fp=new CFatPersonBuilder(); CPersonDirector *p_dfp=new CPersonDirector(p_fp); p_dfp->CreatePerson(); delete p_fp; delete p_dfp; p_fp=NULL; p_dfp=NULL; system("pause"); return 0;}