Chinaunix首页 | 论坛 | 博客
  • 博客访问: 7263671
  • 博文数量: 512
  • 博客积分: 12019
  • 博客等级: 上将
  • 技术积分: 6857
  • 用 户 组: 普通用户
  • 注册时间: 2005-08-01 16:46
文章分类

全部博文(512)

文章存档

2024年(2)

2022年(2)

2021年(6)

2020年(59)

2019年(4)

2018年(10)

2017年(5)

2016年(2)

2015年(4)

2014年(4)

2013年(16)

2012年(47)

2011年(65)

2010年(46)

2009年(34)

2008年(52)

2007年(52)

2006年(80)

2005年(22)

分类: 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;

}

 

说明:每个子类必须实现克隆自身的接口。动态创建一个对象,特别是组合对象为一个新对象时候,可以大大简化类的数目。

阅读(3282) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~