C++设计模式 模板模式跟建造者模式区别

模板模式

class Resume

{

protected: //保护成员

virtual void SetPersonalInfo() {}

virtual void SetEducation() {}

virtual void SetWorkExp() {}

public:

void FillResume()

{

SetPersonalInfo();

SetEducation();

SetWorkExp();

}

};

class ResumeA: public Resume

{

protected:

void SetPersonalInfo() { cout<<"A's PersonalInfo"<<endl; }

void SetEducation() { cout<<"A's Education"<<endl; }

void SetWorkExp() { cout<<"A's Work Experience"<<endl; }

};

class ResumeB: public Resume

{

protected:

void SetPersonalInfo() { cout<<"B's PersonalInfo"<<endl; }

void SetEducation() { cout<<"B's Education"<<endl; }

void SetWorkExp() { cout<<"B's Work Experience"<<endl; }

};

int main()

{

Resume *r1;

r1 = new ResumeA();

r1->FillResume();

delete r1;

r1 = new ResumeB();

r1->FillResume();

delete r1;

r1 = NULL;

return 0;

}

建造者模式

class Builder

{

public:

virtual void BuildHead() {}

virtual void BuildBody() {}

virtual void BuildLeftArm(){}

virtual void BuildRightArm() {}

virtual void BuildLeftLeg() {}

virtual void BuildRightLeg() {}

};

//构造瘦人

class ThinBuilder : public Builder

{

public:

void BuildHead() { cout<<"build thin body"<<endl; }

void BuildBody() { cout<<"build thin head"<<endl; }

void BuildLeftArm() { cout<<"build thin leftarm"<<endl; }

void BuildRightArm() { cout<<"build thin rightarm"<<endl; }

void BuildLeftLeg() { cout<<"build thin leftleg"<<endl; }

void BuildRightLeg() { cout<<"build thin rightleg"<<endl; }

};

//构造胖人

class FatBuilder : public Builder

{

public:

void BuildHead() { cout<<"build fat body"<<endl; }

void BuildBody() { cout<<"build fat head"<<endl; }

void BuildLeftArm() { cout<<"build fat leftarm"<<endl; }

void BuildRightArm() { cout<<"build fat rightarm"<<endl; }

void BuildLeftLeg() { cout<<"build fat leftleg"<<endl; }

void BuildRightLeg() { cout<<"build fat rightleg"<<endl; }

};

//构造的指挥官

class Director

{

private:

Builder *m_pBuilder;

public:

Director(Builder *builder) { m_pBuilder = builder; }

void Create(){

m_pBuilder->BuildHead();

m_pBuilder->BuildBody();

m_pBuilder->BuildLeftArm();

m_pBuilder->BuildRightArm();

m_pBuilder->BuildLeftLeg();

m_pBuilder->BuildRightLeg();

}

int main()
{
    FatBuilder thin;
    Director director(&thin);
    director.Create();
    return 0;
}
 

模板模式跟建造者模式的区别:

模板模式由父类实现调用过程,实现细节在子类中区分;成员函数(protected)

建造者模式父类提供接口,子类负责实现;具体实现流程由建造者类通过接口实现;

猜你喜欢

转载自blog.csdn.net/jijiyuyisheng/article/details/82109474