builder.h
#ifndef BUILDER_H
#define BUILDER_H
#include "computer.h"
class Builder
{
public:
Builder() {}
virtual void buildCpu() = 0;
virtual void buildRam() = 0;
virtual Computer *getResult() = 0;
};
#endif // BUILDER_H
builderA.h
#ifndef BUILDERA_H
#define BUILDERA_H
#include "builder.h"
#include "computer.h"
class BuilderA : public Builder
{
public:
BuilderA() { m_computerA = new Computer(); }
void buildCpu(){ m_computerA->setCpu("i5"); }
void buildRam(){ m_computerA->setRam("DDR4"); }
Computer *getResult(){ return m_computerA; }
private:
Computer *m_computerA;
};
#endif // BUILDERA_H
computer.h
#ifndef COMPUTER_H
#define COMPUTER_H
#include <QString>
class Computer
{
public:
Computer() {}
void setCpu(QString cpu){ m_cpu = cpu;}
void setRam(QString ram){ m_ram = ram;}
QString getCpu(){ return m_cpu; }
QString getRam(){ return m_ram; }
private:
QString m_cpu;
QString m_ram;
};
#endif // COMPUTER_H
director.h
#ifndef DIRECTOR_H
#define DIRECTOR_H
#include "builder.h"
class Director
{
public:
Director() {}
void create(Builder *builder)
{
builder->buildCpu();
builder->buildRam();
}
};
#endif // DIRECTOR_H
main
#include <QApplication>
#include <QtDebug>
#include "director.h"
#include "builder.h"
#include "builderA.h"
//建造者模式
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Director *director = new Director();
Builder *builderA = new BuilderA();
director->create(builderA);
Computer *A = builderA->getResult();
qDebug() << A->getCpu();
qDebug() << A->getRam();
return a.exec();
}
建造者模式的好處就是建造代碼與表示代碼分離
UML