原型模式

//abstractPrototype.h
#ifndef __CPROTOTYPE_H__
#define __CPROTOTYPE_H__ 1

class CPrototype
{
public:
	virtual ~CPrototype(){}
	virtual CPrototype* clone() = 0;
};

#endif//__CPROTOTYPE_H__

//原型模式的接口文件python

//prototyp.cpp
#include <iostream>
#include "abstractPrototype.h"

using std::string;
using std::cout;
using std::endl; 
class CConcretePrototypeA :public CPrototype
{
public:
	CConcretePrototypeA(){ }
	virtual ~CConcretePrototypeA(){ }
	virtual CPrototype* clone();

public:
	void setString(const string& str){
		strProduct = str;
	}

	string getString(){
		return strProduct;
	}

private:
	string strProduct;
};

CPrototype* CConcretePrototypeA::clone(){
	CConcretePrototypeA* clonePrototype = new CConcretePrototypeA();
	clonePrototype->setString(strProduct);
	return (CPrototype *)clonePrototype;
}

int main(int argc, char const *argv[])
{
	CConcretePrototypeA proA;
	CConcretePrototypeA* proB;

	proA.setString("it is proA");
	proB =(CConcretePrototypeA*) proA.clone();
	cout<<proA.getString()<<endl;
	cout<<proB->getString()<<endl;

	cout<<"clone"<<endl;
	proA.setString("it is clone A");
	proB->setString("it is clone B");
	cout<<proA.getString()<<endl;
	cout<<proB->getString()<<endl;

	return 0;
}

這邊在理解clone的方法時有點疑問。對於c++來講。返回類型是固定的。在抽象基類定義了clone的接口方法。他的返回值類型也就定義了。子類繼承抽象基類的clone方法。就只是想實現一個可以克隆自身的方法。它應該和子類沒有太大的聯繫,只是提供一個clone的方法。這個方法不太適合c++啊,否則返回值類型會不對啊。ios

 

python//  python已經提供了copy的接口了。c++

copy。prototype

深複製,copy.deepcopy,code

淺複製copy.copy//繼承

class prototype(object):
	def clone():
		return None


class concretePrototypeA(prototype):
	"""docstring for concretePrototypeA"""
	def __init__(self, desc):
		super(concretePrototypeA, self).__init__()
		self.desc = desc
		
	def clone(self):
		pro = concretePrototypeA(self.desc)
		return pro

if __name__ == '__main__':
	creA = concretePrototypeA("concreteprototypeA");
	creB = creA.clone();
	print creA.desc
	print creB.desc

	creA.desc = "clone A"
	print creA.desc
	print creB.desc
相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息