Prototype原型模式

Prototype原型模式。 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。
       原型模式就是用一个对象来创建另一个相同的对象而无需知道创建的具体细节。而且大大提高了创建的效率。优点主要是这两个:
  1. 屏蔽创建的具体细节,如参数等。
  2. 创建的效率高。因为不必调用构造函数等。
       原型模式也是一种创建型模式,跟建造者模式,工厂模式系类一样,不同的是,建造者模式侧重于一步一步建造对象,工厂模式侧重于多个类的依赖。相同的是 都是通过一个类(对象实例)来专门负责对象的创建工作。

     使用原型模式要先了解下拷贝构造函数的深拷贝和浅拷贝。

代码:
//Prototype.h
#include "stdafx.h"
#include<iostream>
#include<cstring>
using namespace std;
class Prototype
{
public:
	virtual ~Prototype()
	{
		cout << "~Prototype" << endl;
	}
	virtual Prototype* clone()const = 0;
	virtual void show()const = 0;
};

class ConcreteProtype1 :public Prototype
{
public:
	ConcreteProtype1(int len,char*str)
	{
		_length = len;
		_str = new char[_length];
		strcpy_s(_str, _length, str);
	}
	~ConcreteProtype1()
	{
		delete(_str);
		cout << "~ConcreteProtype" << endl;
	}

	ConcreteProtype1(const ConcreteProtype1& rhs)
	{
		//实现深拷贝
		_length = rhs._length;
		_str = new char[_length];
		if (_str != NULL)
			strcpy_s(_str, _length, rhs._str);
		cout << "copy construct ConcreteProtype1" << endl;
	}
	virtual Prototype* clone()const
	{
		return new ConcreteProtype1(*this);
	}

	virtual void show()const
	{
		cout <<"value:"<< _str << endl;
		cout << "Address:" << &_str << endl;
	}
private:
	int _length;
	char* _str;
};
 
 
// PrototypePattern.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "Prototype.h"


int _tmain(int argc, _TCHAR* argv[])
{

	Prototype* p1 = new ConcreteProtype1(6,"hello");
	Prototype *p2 = p1->clone();
	p1->show();
	p2->show();
	getchar();
	return 0;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值