原型模式

//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
相关文章
相关标签/搜索
本站公众号
   欢迎关注本站公众号,获取更多信息