建造者设计模式
2017-09-07 01:25
363 查看
看了这个Java实现: http://blog.csdn.net/lfdfhl/article/details/77851646
用C++练习下.
#include <iostream>
#include <string>
#include <utility>
using namespace std;
/*
产品类
*/
struct Fruit{
string color;
string name;
int weight;
friend ostream& operator<< (ostream& out, const Fruit& obj){
out << "name: " << obj.name
<< "\ncolor: " << obj.color
<< "\nweight: " << obj.weight;
return out;
}
};
/*
建造者蓝本
*/
class AbstractBuilder{
public:
virtual void setColor(const string& color) = 0;
virtual void setName(const string& name) = 0;
virtual void setWeight(int w) = 0;
virtual Fruit* create() = 0;
virtual ~AbstractBuilder(){};
};
/*
具体建造者
*/
class ConcreteBuilder: public AbstractBuilder{
Fruit* fruit = new Fruit;
public:
virtual ~ConcreteBuilder(){delete fruit; cout << "dector.\n";}
virtual void setColor(const string& color) override{
fruit->color = std::move(color);
}
virtual void setName(const string& name) override{
fruit->name = std::move(name);
}
virtual void setWeight(int w) override{
fruit->weight = w;
}
virtual Fruit* create() override{
return fruit;
}
};
/*
导演类
*/
class FruitDirector{
AbstractBuilder* builder = nullptr;
public:
FruitDirector(AbstractBuilder* builder){
this->builder = builder;
}
Fruit* createFruit(const string& color, const string& name, int weight){
builder->setColor(color);
builder->setName(name);
builder->setWeight(weight);
return builder->create();
}
};
int main(){
// 按要求招聘设计师, 该设计师要会调配颜色/给水果取艺名/会称重...好吧,例子不太好 ^_^
AbstractBuilder* builder = new ConcreteBuilder;
// 临时导演指挥设计师设计一个特定水果来......
Fruit* fruit = (new FruitDirector(builder))->createFruit("Red", "Apple", 250);
cout << *fruit << endl;
delete builder;
return 0;
}
效果:
用C++练习下.
#include <iostream>
#include <string>
#include <utility>
using namespace std;
/*
产品类
*/
struct Fruit{
string color;
string name;
int weight;
friend ostream& operator<< (ostream& out, const Fruit& obj){
out << "name: " << obj.name
<< "\ncolor: " << obj.color
<< "\nweight: " << obj.weight;
return out;
}
};
/*
建造者蓝本
*/
class AbstractBuilder{
public:
virtual void setColor(const string& color) = 0;
virtual void setName(const string& name) = 0;
virtual void setWeight(int w) = 0;
virtual Fruit* create() = 0;
virtual ~AbstractBuilder(){};
};
/*
具体建造者
*/
class ConcreteBuilder: public AbstractBuilder{
Fruit* fruit = new Fruit;
public:
virtual ~ConcreteBuilder(){delete fruit; cout << "dector.\n";}
virtual void setColor(const string& color) override{
fruit->color = std::move(color);
}
virtual void setName(const string& name) override{
fruit->name = std::move(name);
}
virtual void setWeight(int w) override{
fruit->weight = w;
}
virtual Fruit* create() override{
return fruit;
}
};
/*
导演类
*/
class FruitDirector{
AbstractBuilder* builder = nullptr;
public:
FruitDirector(AbstractBuilder* builder){
this->builder = builder;
}
Fruit* createFruit(const string& color, const string& name, int weight){
builder->setColor(color);
builder->setName(name);
builder->setWeight(weight);
return builder->create();
}
};
int main(){
// 按要求招聘设计师, 该设计师要会调配颜色/给水果取艺名/会称重...好吧,例子不太好 ^_^
AbstractBuilder* builder = new ConcreteBuilder;
// 临时导演指挥设计师设计一个特定水果来......
Fruit* fruit = (new FruitDirector(builder))->createFruit("Red", "Apple", 250);
cout << *fruit << endl;
delete builder;
return 0;
}
效果:
相关文章推荐
- 我的设计模式之旅(4)——生成器(建造者)模式Builder
- 【设计模式】建造者模式
- 设计模式(六)建造者(创建型)
- 设计模式之五:建造者模式
- 设计模式—建造者模式
- 【设计模式】建造者模式详解
- java设计模式之-建造者模式
- 设计模式之建造者模式
- 10.java设计模式(读书笔记)建造者模式
- 设计模式(5):建造者模式
- Android设计模式之建造者模式builder
- 菜鸟之路-浅谈设计模式之建造者模式
- 23种设计模式(4):建造者模式
- 设计模式之建造者模式
- Java设计模式——建造者模式
- [置顶] 【设计模式】之建造者模式详解与应用(六)
- java设计模式--创建模式--建造者模式
- 设计模式——建造者模式
- 设计模式——建造者模式
- Android的开发之&java23中设计模式------建造者模式