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模式

设计模式之Prototype(c++)的更多相关文章

  1. 原型设计模式(prototype

    # 什么是原型设计模式 > 这里与软件工程中的原型开发模式有那么一点类似的地方,我们首先需要构建出一个原型,这个原型可以在现实开发中抽象出来的具体类型,但是这个类型与具体的类又不同,需要抽取公共 ...

  2. Objective-C设计模式——原型Prototype(对象创建)

    1.原型 原型设计模式所谓原型设计模式,其实就是对象复制,这个特性在所有语言基本上都是存在的. 我们知道在OC中,对象赋值其实是对对象的引用复制,其实就是相当于C语言中的指针.创建了一个新的变量,但是 ...

  3. [学习笔记]设计模式之Prototype

    写在前面 为方便读者,本文已添加至索引: 设计模式 学习笔记索引 在笔记Builder模式中,我们曾见到了最初用于创建平行世界的函数createWorld,并且它是Mage类的成员函数(毕竟是专属于魔 ...

  4. 设计模式之Prototype(原型)(转)

    定义: 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象. Prototype模式允许一个对象再创建另外一个可定制的对象,根本无需知道任何如何创建的细节,工作原理是:通过将一个原型对象传 ...

  5. 设计模式之prototype(原型模型)

    以我的理解原型模式的重点就几个字 用于克隆易变对象设计模式主要是为了解决new对象时的耦合问题,这是要克隆某个易变对象时只要直接传入要克隆的对象就可以实现克隆一下是我复制网上的一些代码 摘自<设 ...

  6. 设计模式之Prototype

    设计模式总共有23种模式这仅仅是为了一个目的:解耦+解耦+解耦...(高内聚低耦合满足开闭原则) 介绍: 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象. 为什么要用Prototype ...

  7. 【设计模式】Prototype

    前言 这篇讲设计模式的部分相对较少.Prototype设计模式,它提供一种复制对象的思路.使用Prototype就可以在不需要了解类结构的前提下,复制一个现有对象.写了一个代码片段,讲解使用Objec ...

  8. 设计模式--原型(Prototype)模式

    写这些也许有人认为“为了模式而模式”.Insus.NET所想到的,每个大师成为大师之前,也许都得这样做. 走路,从小就开始学,直至现在,谁还不是为了走路而走路?一直重复着...... 很多人没有分享自 ...

  9. 设计模式(1)--Prototype(原型模式)--创建型

    1.模式定义: 原型模式就是用原型实例指定创建对象的种类,并且通过复制这些原型创建新的对象. 2.使用场景: 在原型模式中我们可以利用过一个原型对象来指明我们所要创建对象的类型,然后通过复制这个对象的 ...

随机推荐

  1. CSS 实现图片灰度效果 兼容各种浏览器

    CSS 实现图片灰度效果 兼容各种浏览器如360浏览器 CSS实现图片灰度效果就是通过CSS样式让彩色图片呈现为灰色,相当于把一张图像的颜色模式调整为灰度,CSS可以通过以下几种方法来实现灰度效果. ...

  2. win32下利用python操作printer

    在win32下操作printer:   1)import win32print   2) 获得默认打印机名:          >>> win32print.GetDefaultPr ...

  3. docker学习笔记15:Dockerfile 指令 USER介绍

    USER指令用于指定容器执行程序的用户身份,默认是 root用户. 在docker run 中可以通过 -u 选项来覆盖USER指令的设置. 举例:docker run -i -t -u mysql ...

  4. wget -r -nc -np "http://www.zhihu.com/"

    下载网站所有 -r,  --recursive          specify recursive download. -nc, --no-clobber              skip dow ...

  5. InheritableThreadLocal

    InheritableThreadLocal继承自ThreadLocal,但比ThreadLocal多一个特性: 子线程可以继承父亲线程上下文中的信息 但是,有两个点需要注意的: 只有子线程创建之前的 ...

  6. css之display:inline-block与float区别(可以尝试用一下)

    HTML的元素有多种display属性,比较常见的有display:none; display:block; display:inline和display:inline-block;等.详细可参阅W3 ...

  7. JavaScript下全选反选的Demo程序里实现checkmeonly函数 DOM

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. Intent数据传递

    (1)首先是Activity的简单跳转: 1).Activity的切换一般是通过Intent来实现的,Intent是一个Activity到达另一个Activity的引路者,它描述了起点(当前Activ ...

  9. 目录 of 2013-2014-1(内容已更新结束)

    (内容已更新结束) UML部分: ---------------1.概述2.用例图3.类图4.顺序图 MVC部分: ----------------1.概述2.路由3.控制器4.视图5.模型6.安装部 ...

  10. 基于visual Studio2013解决C语言竞赛题之0904文件排序

       题目