//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