您的位置:首页 > 其它

设计模式Before-after之建造者模式

2014-03-10 23:50 330 查看
before.cxx

#include <iostream>
#include <string>

class Shape {
public:
void setColor(const std::string &colorName) {
this->colorName = colorName;
}
void setKind(const std::string &kindName) {
this->kindName = kindName;
}
void what(void) {
std::cout << "a " << this->colorName << " " << this->kindName << std::endl;
}
private:
std::string colorName;
std::string kindName;
};

int main(void) {
Shape blackCircle;
blackCircle.setColor("black");
blackCircle.setKind("circle");
blackCircle.what();

// Shape whiteSquare;
// blackCircle.setColor("white");
// blackCircle.setKind("square");
// blackCircle.what();
return 0;
}

after.cxx

#include <iostream>
#include <string>
#include "config.hxx"

class Shape {
public:
void setColor(const std::string &colorName) {
this->colorName = colorName;
}
void setKind(const std::string &kindName) {
this->kindName = kindName;
}
void what(void) {
std::cout << "a " << this->colorName << " " << this->kindName << std::endl;
}
private:
std::string colorName;
std::string kindName;
};

class ShapeBuilder {
public:
virtual void buildColor(void) = 0;
virtual void buildKind(void) = 0;
Shape *getResult(void) {
return &this->shape;
}
protected:
Shape shape;
};

class BlackCircleBuilder: public ShapeBuilder {
public:
void buildColor(void) {
this->shape.setColor("black");
}
void buildKind(void) {
this->shape.setKind("circle");
}
};

class WhiteSquareBuilder: public ShapeBuilder {
public:
void buildColor(void) {
this->shape.setColor("white");
}
void buildKind(void) {
this->shape.setKind("square");
}
};

class ShapeDirector {
public:
ShapeDirector(ShapeBuilder *shapeBuilder) {
this->shapeBuilder = shapeBuilder;
}
Shape *construct(void) {
shapeBuilder->buildColor();
shapeBuilder->buildKind();
return shapeBuilder->getResult();
}
private:
ShapeBuilder *shapeBuilder;
};

int main(void) {
ShapeBuilder *shapeBuilder = &_SHAPE_BUILDER_();
ShapeDirector shapeDirector(shapeBuilder);
Shape *shape = shapeDirector.construct();
shape->what();
return 0;
}


config.hxx

#define _SHAPE_BUILDER_ BlackCircleBuilder

// #define _SHAPE_BUILDER_ WhiteSquareBuilder
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: