设计模式Before-after之建造者模式
2014-03-10 23:50
330 查看
before.cxx
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
#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
相关文章推荐
- 设计模式的艺术之道--建造者模式
- 设计模式(三) 建造者模式
- 设计模式详解之建造者模式
- 设计模式Before-after之代理模式
- 设计模式(11)---->建造者模式
- 设计模式(三)建造者模式
- 设计模式(九)建造者模式
- 设计模式(4)之建造者模式
- 设计模式(五) : 创建型模式--建造者模式
- 设计模式Before-after之工厂方法模式
- 设计模式Before-after之组合模式
- 设计模式(五)——建造者模式实例
- 设计模式(九)——建造者模式
- 设计模式(十六):建造者模式
- 《设计模式》之建造者模式
- 设计模式Before-after之简单工厂模式
- 设计模式Before-after之单例模式
- 设计模式(四)——建造者模式
- 设计模式(6)之建造者模式
- [置顶] 设计模式(三)建造者模式