设计模式---原型模式

原型模式在日常生活中比较常见,比如Ctrl+C/Ctrl+V、小学生抄作业等,其将一个某个对象复制N份,稍作修改形成一个新的对象,这就是原型模式。


class Prototype
{
public:
	virtual ~Prototype()
	{

	}
	virtual Prototype* clone() = 0;
protected:
	Prototype()
	{

	}
};
class Student:public
	Prototype
{
public:
	Student()
	{

	}

	~Student()
	{

	}

	void setAge(int age)
	{
		miAge = age;
	}
	Prototype* clone()
	{
		return new Student(*this);
	}
private:
	int miAge;
};

void main()
{
	Prototype* stu1 = new Student();
	Prototype* stu2 = stu1->clone();
}

对于C++来说,原型函数跟赋值构造函数容易混淆

相同点:原型模式和拷贝构造函数都是要产生对象的复制品。

不同点:原型模式实现的是一个clone接口,注意是接口,也就是基于多态的clone虚函数。也就是说原型模式能够通过基类指针来复制派生类对象。拷贝构造函数完不成这样的任务。

     原型模式的核心是克隆,构造函数只是克隆的一个办法而已。

1)T a1; T a2(a1); //使用a1对象来初始化a2对象,a2处于初始构造状态,因此调用拷贝构造函数;

 2)T a1; T a2; a2 = a1; //a1赋值给a2的时候,a2已经构造完成了,因此调用拷贝赋值运算符;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值