Prototype原型模式

Posted slgkaifa

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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;
}








以上是关于Prototype原型模式的主要内容,如果未能解决你的问题,请参考以下文章

原型模式(Prototype)-创建型(Creational)设计模式

设计模式 - Prototype 原型模式

设计模式——10.原型模式

设计模式 - Prototype 原型模式

设计模式 - Prototype 原型模式

JAVA设计模式之原型模式(prototype)