设计模式之Prototype(c++)

原创 2013年12月04日 22:03:43

Prototype模型:

作用:

用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象----克隆(clone)对象。


Prototype模型类图如下:

形象说明:如果客户想配钥匙(ConcretePrototype),就可以拿着钥匙去配钥匙的店铺,店铺老板会根据配的钥匙原型,给你配(Clone)钥匙!


具体简单的实例实现:

/*Prototype.hxx*/

#ifndef _PROTOTYPE_H_
#define _PROTOTYPE_H_

class Prototype
{
public:
        virtual ~Prototype();
        virtual Prototype* Clone() const = 0;
protected:
        Prototype();
};

class ConcretePrototype:public Prototype
{
public:
        ConcretePrototype();
        ConcretePrototype(const ConcretePrototype& cp);
        ~ConcretePrototype();
        Prototype* Clone() const;
};
#endif //~_PROTOTYPE_H_

/*Prototype.cxx*/

#include "Prototype.hxx"
#include <iostream>

using namespace std;

Prototype::Prototype()
{

}

Prototype::~Prototype()
{

}

Prototype* Prototype::Clone() const 
{
	return 0;
}

//concretePrototype

ConcretePrototype::ConcretePrototype()
{

}

ConcretePrototype::~ConcretePrototype()
{

}

ConcretePrototype::ConcretePrototype(const ConcretePrototype& cp)
{
	cout<< "ConcretePrototype copy..." << endl;
}

Prototype* ConcretePrototype::Clone() const
{
	return new ConcretePrototype(*this);
}

/*main.cxx*/

#include "Prototype.hxx"

#include <iostream>
using namespace std;

int main(int argc, char* argv[])
{
	Prototype* p = new ConcretePrototype();
	Prototype* p1 = p->Clone();

	cout << p <<"||" << p1 << endl;
	
	delete p;
	p = NULL;
	if (p1)
	{
		delete p1;
		p1 = NULL;
	}
	return 0;
}

执行结果:

liujl@liujl-ThinkPad-Edge-E431:~/mysource/Design_model/Prototype$ g++ -o main main.o Prototype.o
liujl@liujl-ThinkPad-Edge-E431:~/mysource/Design_model/Prototype$ ./main 
ConcretePrototype copy...
0xf11010||0xf11030

参考文档:

1、c++设计模式.pdf

2、常见设计模式的解析和实现(C++)之四-Prototype模式

我所理解的设计模式(C++实现)——原型模式(Prototype Pattern)

解决的问题: 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。这个其实和C++的拷贝构造函数的作用是一致的,实际上就是动态抽取当前对象运行时的状态。 类图结构:      ...
  • LCL_data
  • LCL_data
  • 2013年04月06日 16:01
  • 9389

设计模式---原型模式(C++实现)

找了一图:这就很好理解了 什么是原型模式? 在GOF的《设计模式:可复用面向对象软件的基础》中是这样说的:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。这这个定义中,...
  • My_heart_
  • My_heart_
  • 2017年03月14日 20:26
  • 286

如何理解C++中的动态绑定(dynamic binding)

    在浏览C++论坛时,我总是能发现很多C++初学者的提问帖子,都是关于动态绑定的。基本大意就是不完全理解动态绑定该如何理解,造成一些面试或者实际编程上的困扰。本文就是针对这个问题作出的解答。作者...
  • sy8111
  • sy8111
  • 2007年05月09日 22:10
  • 3560

设计模式(创建型)之原型模式(Prototype Pattern)

要理解原型原型模式必须先理解Java里的浅复制和深复制。有的地方,复制也叫做克隆。Java提供这两种克隆方式。 因为Java中的提供clone()方法来实现对象的克隆,所以Prototype模式实现一...
  • yanbober
  • yanbober
  • 2015年04月29日 11:28
  • 3021

我与C++设计模式(四)——prototype pattern

我故意将bia
  • guozhengdong
  • guozhengdong
  • 2014年10月01日 10:20
  • 494

在高性能计算中慎用C++ std::complex

 Copyright (c) prototype, all rights reserved。 在不对原文内容(包括作者信息)做任何改动的前提下,欢迎自由转载。 两年多前写的内部资料。现在自己把它翻成中...
  • prototype
  • prototype
  • 2006年11月13日 04:26
  • 8462

【C++11】nullptr关键字

转载于:http://blog.csdn.net/soaliap/article/details/7663865 从1972年C语言刚刚诞生以来,常数0就扮演着整数(int)0和空指针( null p...
  • afei198409
  • afei198409
  • 2013年12月18日 17:42
  • 7227

设计模式总结之Prototype Pattern(原型模式)

用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。
  • cooldragon
  • cooldragon
  • 2016年08月11日 00:43
  • 1429

设计模式实例(Lua)笔记之五(Prototype 模式)

1.描述      首先从实际生活来了解原型模式的由来,假设你有一份非常好的讲义,你的朋友也想要一份,那么怎么办?重新手抄一份?显然不是,当然是用复印机复印一份来得方便、直接,并且准确性也高,这种用原...
  • my183100521
  • my183100521
  • 2015年08月20日 10:37
  • 1341

C++ complex用法

一、complex是复数的表示,需要#include 二、复数对象有float, double, long double几种。 三、声明如下: complex purei(0,7)...
  • GraceLand525
  • GraceLand525
  • 2016年12月15日 14:40
  • 1728
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:设计模式之Prototype(c++)
举报原因:
原因补充:

(最多只允许输入30个字)