创建型设计模式---构建模式(Builder)
2014-08-26 17:08
267 查看
builder模式:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示
适用场景:
(1)当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时
(2)当构造过程必须允许被构造的对象有不同的表示时
#include <iostream>
#include <string>
#include <map>
using namespace std;
class Vehicle
{
public:
Vehicle(const string &type) : type_(type)
{
}
void setPart(const string &partKey, const string &partValue)
{
parts_[partKey] = partValue;
}
void const show()
{
cout << "Type: " << type_ << endl;
cout << "Engine: " << parts_["engine"] << endl;
cout << "Wheels: " << parts_["wheels"] << endl;
}
private:
Vehicle();
private:
string type_;
map<string, string> parts_;
};
class VehicleBuilder
{
public:
VehicleBuilder()
{
vehicle_ = NULL;
}
virtual ~VehicleBuilder()
{
if (NULL != vehicle_)
{
delete vehicle_;
vehicle_ = NULL;
}
}
Vehicle *getVehicle()
{
return vehicle_;
}
virtual void buildEngine() = 0;
virtual void buildWheels() = 0;
protected:
Vehicle *vehicle_;
};
class BMW : public VehicleBuilder
{
public:
BMW()
{
vehicle_ = new Vehicle("BMW");
}
void buildEngine()
{
vehicle_->setPart("engine", "BMW Engine");
}
void buildWheels()
{
vehicle_->setPart("wheels", "BMW Wheels");
}
};
class Audi : public VehicleBuilder
{
public:
Audi()
{
vehicle_ = new Vehicle("Audi");
}
void buildEngine()
{
vehicle_->setPart("engine", "Audi Engine");
}
void buildWheels()
{
vehicle_->setPart("wheels", "Audi Wheels");
}
};
class Director
{
public:
void construct(VehicleBuilder *builder)
{
builder->buildEngine();
builder->buildWheels();
}
};
int main()
{
VehicleBuilder *builder = NULL;
Director director;
builder = new BMW();
director.construct(builder);
builder->getVehicle()->show();
delete builder;
builder = new Audi();
director.construct(builder);
builder->getVehicle()->show();
delete builder;
builder = NULL;
return 0;
}
output:
Type: BMW
Engine: BMW Engine
Wheels: BMW Wheels
Type: Audi
Engine: Audi Engine
Wheels: Audi Wheels
适用场景:
(1)当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时
(2)当构造过程必须允许被构造的对象有不同的表示时
#include <iostream>
#include <string>
#include <map>
using namespace std;
class Vehicle
{
public:
Vehicle(const string &type) : type_(type)
{
}
void setPart(const string &partKey, const string &partValue)
{
parts_[partKey] = partValue;
}
void const show()
{
cout << "Type: " << type_ << endl;
cout << "Engine: " << parts_["engine"] << endl;
cout << "Wheels: " << parts_["wheels"] << endl;
}
private:
Vehicle();
private:
string type_;
map<string, string> parts_;
};
class VehicleBuilder
{
public:
VehicleBuilder()
{
vehicle_ = NULL;
}
virtual ~VehicleBuilder()
{
if (NULL != vehicle_)
{
delete vehicle_;
vehicle_ = NULL;
}
}
Vehicle *getVehicle()
{
return vehicle_;
}
virtual void buildEngine() = 0;
virtual void buildWheels() = 0;
protected:
Vehicle *vehicle_;
};
class BMW : public VehicleBuilder
{
public:
BMW()
{
vehicle_ = new Vehicle("BMW");
}
void buildEngine()
{
vehicle_->setPart("engine", "BMW Engine");
}
void buildWheels()
{
vehicle_->setPart("wheels", "BMW Wheels");
}
};
class Audi : public VehicleBuilder
{
public:
Audi()
{
vehicle_ = new Vehicle("Audi");
}
void buildEngine()
{
vehicle_->setPart("engine", "Audi Engine");
}
void buildWheels()
{
vehicle_->setPart("wheels", "Audi Wheels");
}
};
class Director
{
public:
void construct(VehicleBuilder *builder)
{
builder->buildEngine();
builder->buildWheels();
}
};
int main()
{
VehicleBuilder *builder = NULL;
Director director;
builder = new BMW();
director.construct(builder);
builder->getVehicle()->show();
delete builder;
builder = new Audi();
director.construct(builder);
builder->getVehicle()->show();
delete builder;
builder = NULL;
return 0;
}
output:
Type: BMW
Engine: BMW Engine
Wheels: BMW Wheels
Type: Audi
Engine: Audi Engine
Wheels: Audi Wheels
相关文章推荐
- 设计模式杂谈:创建型模式之生成器模式(Builder Pattern)
- 设计模式之生成器(Builder)----对象创建型模式
- 设计模式入门学习 构建Builder模式
- [设计模式笔记]一. 创建型模式--4.Builder模式(二)
- 面向对象设计模式学习---Builder模式(创建型)
- 设计模式(三)建造者模式Builder(创建型)
- 设计模式之构建(Builder)模式 建造房子实例分析
- 设计模式三:Builder 生成器——对象创建型模式
- 设计模式 3.2 Builder(生成器)对象创建型模式
- 设计模式(三)建造者模式Builder(创建型)
- 设计模式(三)建造者模式Builder(创建型)
- Builder生成器(创建型设计模式)面向对象设计模式纵横谈讲座笔记之四
- 设计模式-创建型模式之 Builder(生成器)
- 设计模式笔记--创建型模式之二 Builder
- GOF设计模式-创建型模式理解与思索(一)(Abstract Factory 和Builder)
- 设计模式实例解析-创建型模式(Singleton、Abstract Factory、Builder)[转]
- 几种创建型的设计模式概析【下】——Builder模式,ProtoType模式【C++实现】
- [创建型设计模式:Builder]代码实现
- [设计模式-创建型]建造者(Builder)
- [设计模式-创建型]建造者(Builder)