#include<iostream>
using namespace std; class PersonBuilder { public: virtual void BuildHead(){} virtual void BuildBody(){} virtual void BuildArmLeft(){} }; class PersonThinBuilder:public PersonBuilder { public: void BuildHead() { cout<<"thin buildhead\n"; } void BuildBody() { cout<<"thin buildbody\n"; } void BuildArmLeft() { cout<<"thin buildArmLeft\n"; } }; class PersonFatBuilder:public PersonBuilder { public: void BuildHead() { cout<<"fat buildhead\n"; } void BuildBody() { cout<<"fat buildbody\n"; } void BuildArmLeft() { cout<<"fat buildArmLeft\n"; } }; class PersonDirector { private: PersonBuilder *pb; public: PersonDirector(PersonBuilder *pb) { this->pb = pb; } void CreatePerson() { pb->BuildHead(); pb->BuildBody(); pb->BuildArmLeft(); } }; int main() { PersonThinBuilder *ptb = new PersonThinBuilder(); PersonDirector *pdthin = new PersonDirector(ptb); pdthin->CreatePerson(); PersonFatBuilder *pf = new PersonFatBuilder(); PersonDirector *pdfat = new PersonDirector(pf); pdfat->CreatePerson(); }