#include <QCoreApplication>
#include <QDebug>
产品类 Person
class Person
{
public:
Person(){}
void setName(QString name)
{
c_name = name;
}
void setAge(int age)
{
c_age = age;
}
void setGender(int gender)
{
c_gender = gender;
}
void disp()
{
qDebug()<< c_name << c_age << c_gender;
}
private:
QString c_name;
int c_age;
int c_gender;
};
抽象建造者 AbstractBuilder
class AbstractBuilder
{
public:
AbstractBuilder();
virtual ~AbstractBuilder();
virtual void buildName() = 0;
virtual void buildAge() = 0;
virtual void buildgender() = 0;
virtual Person *getPerson() = 0;
Person *c_person;
};
AbstractBuilder::~AbstractBuilder()
{
if(c_person)
{
delete c_person;
}
}
AbstractBuilder::AbstractBuilder()
{
c_person = new Person;
}
具体建造者 ConcreteBuilderA
class ConcreteBuilderA : public AbstractBuilder
{
public:
ConcreteBuilderA();
void buildName();
void buildAge();
void buildgender();
Person *getPerson();
};
void ConcreteBuilderA::buildName()
{
c_person->setName("ccb_A");
}
void ConcreteBuilderA::buildAge()
{
c_person->setAge(18);
}
void ConcreteBuilderA::buildgender()
{
c_person->setGender(0);
}
Person *ConcreteBuilderA::getPerson()
{
return c_person;
}
ConcreteBuilderA::ConcreteBuilderA()
{
qDebug()<< "ConcreteBuilderA";
}
具体建造者 ConcreteBuilderB
class ConcreteBuilderB : public AbstractBuilder
{
public:
ConcreteBuilderB();
void buildName();
void buildAge();
void buildgender();
Person *getPerson();
};
void ConcreteBuilderB::buildName()
{
c_person->setName("ccb_B");
}
void ConcreteBuilderB::buildAge()
{
c_person->setAge(22);
}
void ConcreteBuilderB::buildgender()
{
c_person->setGender(1);
}
Person *ConcreteBuilderB::getPerson()
{
return c_person;
}
ConcreteBuilderB::ConcreteBuilderB()
{
qDebug()<< "ConcreteBuilderB";
}
指挥者 Director
class Director
{
public:
void setBuilder(AbstractBuilder *builder);
//封装建造流程,返回建造结果
Person *construct()
{
c_builder->buildName();
c_builder->buildAge();
c_builder->buildgender();
return c_builder->getPerson();
}
private:
AbstractBuilder *c_builder;
};
void Director::setBuilder(AbstractBuilder *builder)
{
c_builder = builder;
}
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
//抽象建造者
AbstractBuilder *builder;
//指挥者
Director *director = new Director;
//产品
Person *person;
//指定具体建造者A
builder = new ConcreteBuilderA;
director->setBuilder(builder);
person = director->construct();
person->disp();
//指定具体建造者B
builder = new ConcreteBuilderB;
director->setBuilder(builder);
person = director->construct();
person->disp();
return a.exec();
}