int main(int argc, char* argv[]) { /*以下区块为一个测试,测试不用原型模式克隆对象,直接生成对象赋值, 个人感觉和原型方法区别不是很大。唯一的区别需要知道具体类。抽象基类不能实例化,就算基类不是抽象的, 仅凭基类以及子类的一个实例(不知道具体子类名)想得到一个与子类对象一样的实例是很困难的*/ /* ConcretePrototype cp1(101,"wang",23); //ConcretePrototype cp2; //cp2=cp1; //上两句等效于 ConcretePrototype cp2(cp1); cp1.setName("zhang"); cp1.show(); cp2.show(); //*/ Prototype* p = new ConcretePrototype(101,"wang",23); /*new ConcretePrototype(101,"wang",23); 可以是从其他渠道传递过来的 也就是说,我们无需知道具体的类,只有拥有他的抽象接口,和一个具体的实例对象, 我们就可以得到一个与其同样的对象,加以应用。这样,无论在系统运行时需要操作那个具体类, 都可以动态制定 */ Prototype* p1 = p->Clone(); p->show(); p1->show(); p->setName("li"); p->show(); p1->show(); printf("Hello World!\n"); return 0; }
void test_prototype() { Prototype* p = new ConcretePrototype; Prototype* p1 = p->Clone(); delete p; delete p1; }
int main( int argc, char* argv[] ) { Prototype* p = new ConcretePrototype(); Prototype* p1 = p->Clone(); //cout << "address p: " << p << endl; //cout << "address p1: " << p1 << endl; if ( p ) { delete p; p = NULL; } if ( p1 ) { delete p1; p1 = NULL; } return 0; }
///Prototype 原型模式提供了一个通过已存在对象进行新对象创建的接口 ///实际上 Prototype 模式和 Builder 模式、 AbstractFactory 模式都是通过一个类(对象实例)来专门负责对象的创建工作(工厂对象), 它们之间的区别是: ///Builder 模式重在复杂对象的一步步创建 AbstractFactory 模式重在产生多个相互依赖类的对象,而 Prototype 模式重在从自身复制自己 void PrototypeTest() { Prototype* p = new ConcretePrototype(); Prototype* p1 = p->Clone(); delete p1; }
void Operation() { Prototype * p = _prototype->Clone(); cout << "Using " << p->getType() << " created from prototype." << endl; }
int main(void) { Prototype *p = new ConcretePrototype(); Prototype *pl = p->Clone(); return 0; }