全部博文(512)
分类: C/C++
2006-08-28 17:03:10
提供一种创建对象方式,通过复制已经存在的对象产生新的对象。该模式的一个特点是,客户端在创建一个实例时候,不需要知道实例的具体类型。实现要有一个对应类的原型对象。在c++,该模式可方便用于反射。
举例:
1、定义原形接口 VehicleProtoType
//申明原型
class VehicleProtoType
{
//声明一个接口
public:
virtual VehicleProtoType *Clone() =0;
};
2 实现一个接口
///////////////实现 接口
//轿车类
class Car :public VehicleProtoType
{
public:
int a;
public:
Car();
Car(Car& car);
Car *Clone() ;
};
Car ::Car(){}
Car::Car(Car& car){
a =200;
}
Car *Car::Clone(){
return new Car(*this);
}
/////////////////////////////////////
//公交车
class Bus :public VehicleProtoType
{
public:
int b;
public:
Bus();
Bus(Bus& bus);
Bus *Clone() ;
};
Bus ::Bus(){}
Bus::Bus(Bus& bus){
b =200;
}
Bus *Bus::Clone(){
return new Bus(*this);
}
3、客户端使用接口
int _tmain(int argc, _TCHAR* argv[])
{
Car *v1 = new Car();
v1->a=100;
VehicleProtoType *v2 = v1->Clone();
delete v1;
delete v2;
return 0;
}
说明:每个子类必须实现克隆自身的接口。动态创建一个对象,特别是组合对象为一个新对象时候,可以大大简化类的数目。