原型模式(Prototype)

Posted enumhack

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了原型模式(Prototype)相关的知识,希望对你有一定的参考价值。

       Prototype模式是一种对象创建型模式,它采取复制原型对象的方法来创建对象的实例。使用Prototype模式创建的实例,具有原型一样的数据。

            1) 由原型对象自身创建目标对象。也就是说,对象创建这一动作发自原型对象本身。
            2) 目标对象是原型对象的一个克隆。也就是说,通过Prototype模式创建的对象,不仅仅是与原型对象具有相同的结构,还与原型对象有相同的值。

            3) 根据对象克隆深度层次的不同,有浅度克隆和深度克隆。

      
       Prototype模式也正是提供了自我复制的功能,就是说新对象的创建可以通过已有对象进行创建。在C++中拷贝构造函数(Copy Constructor)曾经是很对程序员的噩梦,浅层拷贝也是面试的重点之一。
        
            
                                                                     2-1Prototype Pattern结构图
 
       Prototype模式提供了一个通过已存在对象进行新对象创建的接口(Clone),Clone()实现和具体的实现语言相关,在C++中我们将通过拷贝构造函数实现之。
 应用场景:
         “某些结构复杂的对象”   的创建工作,由于需求的变化,这些对象经常面临着巨大的变化,但是它们却拥有比较稳定一致的接口。    一个复杂对象具有自我复制功能,同一一套接口。
       代码如下:
           
#include <iostream>
using namespace std;

class Pro
{
public:
	virtual Pro* clone() = 0;
	virtual void print() = 0;
};

class CPlusPlusPro : public Pro
{	
public:
	CPlusPlusPro(string name, string job) 
	{
		m_job = job;
		m_name = name;
	}
	CPlusPlusPro(CPlusPlusPro &cpp)
	{
		m_name = cpp.m_name;
		m_job = cpp.m_job;
	}

	virtual void print() 
	{
		cout << m_name << " : " << m_job << endl;
	}

	virtual Pro* clone()
	{
		return new CPlusPlusPro(*this);
	}

public:
	string m_name;
	string m_job;
};

int main()
{
	CPlusPlusPro *tmp = new CPlusPlusPro("tom", "engineer");
	tmp->print();

	Pro *cpp = tmp->clone();
	cpp->print();

	delete cpp;
	delete tmp;
	return 0;
}

  

   
总结:
        Prototype模式通过复制原型(Prototype)而获得新对象创建的功能,这里Prototype本身就是“对象工厂”(因为能够生产对象),实际上Prototype模式和Builder模式、AbstractFactory模式都是通过一个类(对象实例)来专门负责对象的创建工作(工厂对象),它们之间的区别是:Builder模式重在复杂对象的一步步创建(并不直接返回对象),<span data-wiz-span="data-wiz-span" style="font-family: \'Times New Roman\'; font-size: 1rem;">C9E8BCC6C4A3CABDBEABBDE2A3AD476F46203233D6D6C9E8BCC6C4A3CABDBDE2CEF6B8BD432B2BCAB5CFD6D4B4C2EBC9E8</span>AbstractFactory模式重在产生多个相互依赖类的对象,而Prototype模式重在从自身复制自己创建新类。

<wiz_tmp_tag id="wiz-table-range-border" contenteditable="false" style="display: none;">

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

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

设计模式 - Prototype 原型模式

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

设计模式 - Prototype 原型模式

设计模式 - Prototype 原型模式

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