设计模式之Prototype(c++)
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
参考文档:
2、常见设计模式的解析和实现(C++)之四-Prototype模式
设计模式之Prototype(c++)的更多相关文章
- 原型设计模式(prototype
# 什么是原型设计模式 > 这里与软件工程中的原型开发模式有那么一点类似的地方,我们首先需要构建出一个原型,这个原型可以在现实开发中抽象出来的具体类型,但是这个类型与具体的类又不同,需要抽取公共 ...
- Objective-C设计模式——原型Prototype(对象创建)
1.原型 原型设计模式所谓原型设计模式,其实就是对象复制,这个特性在所有语言基本上都是存在的. 我们知道在OC中,对象赋值其实是对对象的引用复制,其实就是相当于C语言中的指针.创建了一个新的变量,但是 ...
- [学习笔记]设计模式之Prototype
写在前面 为方便读者,本文已添加至索引: 设计模式 学习笔记索引 在笔记Builder模式中,我们曾见到了最初用于创建平行世界的函数createWorld,并且它是Mage类的成员函数(毕竟是专属于魔 ...
- 设计模式之Prototype(原型)(转)
定义: 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象. Prototype模式允许一个对象再创建另外一个可定制的对象,根本无需知道任何如何创建的细节,工作原理是:通过将一个原型对象传 ...
- 设计模式之prototype(原型模型)
以我的理解原型模式的重点就几个字 用于克隆易变对象设计模式主要是为了解决new对象时的耦合问题,这是要克隆某个易变对象时只要直接传入要克隆的对象就可以实现克隆一下是我复制网上的一些代码 摘自<设 ...
- 设计模式之Prototype
设计模式总共有23种模式这仅仅是为了一个目的:解耦+解耦+解耦...(高内聚低耦合满足开闭原则) 介绍: 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象. 为什么要用Prototype ...
- 【设计模式】Prototype
前言 这篇讲设计模式的部分相对较少.Prototype设计模式,它提供一种复制对象的思路.使用Prototype就可以在不需要了解类结构的前提下,复制一个现有对象.写了一个代码片段,讲解使用Objec ...
- 设计模式--原型(Prototype)模式
写这些也许有人认为“为了模式而模式”.Insus.NET所想到的,每个大师成为大师之前,也许都得这样做. 走路,从小就开始学,直至现在,谁还不是为了走路而走路?一直重复着...... 很多人没有分享自 ...
- 设计模式(1)--Prototype(原型模式)--创建型
1.模式定义: 原型模式就是用原型实例指定创建对象的种类,并且通过复制这些原型创建新的对象. 2.使用场景: 在原型模式中我们可以利用过一个原型对象来指明我们所要创建对象的类型,然后通过复制这个对象的 ...
随机推荐
- [Swust OJ 179]--火柴棍(找规律)
题目链接:http://acm.swust.edu.cn/problem/0179/ Time limit(ms): 1000 Memory limit(kb): 65535 Descriptio ...
- Javascript 运动应用 02
JS运动应用 多个物体同时运动 例子:多个Div,鼠标移入 ...
- MyEclipse 引用其他项目及其jar包
倘若在工作区有两个项目A和B,B项目引用A项目及其jar包(防止调用时A项目的方法出现NoClassFound),步骤如下: 在A项目上点右键看属性,点击Build Path--->Concon ...
- excel列显示形式互换(字母与数字)
以office2007为例: excel选项>公式>使用公式下的'R1C1引用样式' 打上钩显示形式为数字,不打钩显示形式为字母
- activebar的用法
效果图: 网站页面上弹出消息提示狂,用来提示重大事件. <script src="http://www.ijquery.cn/js/jquery-1.7.2.min.js"& ...
- 利用cmake来搭建开发环境
对于经常在终端下写程序的non-windows程序员,Makefile绝对是最常用的工具,小到一个文件的简单的测试程序,大到数百个文件的商业软件,只需要有shell,一个make命令就可得到可运行的程 ...
- SQL SERVER 2008R2sp1配置Database Mail –用SQL 数据库发邮件
步骤1)创建配置文件和帐户 看图片吧,挺简单的: 中间略过的一些步骤,就点下一步即可. 下面我们测试一下: Step 2)配置邮件: 在完成账户和配置文件创建之后,我们需要配置Database Mai ...
- Vmware Briged方式使虚拟机上网
1.禁用掉在网络连接VMware Network Adapter VMnet1和VMware Network Adapter VMnet8 (在bridged这种方式下不需要这两个连接,如下图) 2. ...
- android之View的启动过程
转自:http://www.cdtarena.com/gpx/201308/9607.html 程序里调用了onSizeChanged方法进行了一些设置,不知道onSizeChanged是在什么时候启 ...
- mac下的应用程序发布 及 打包(Python写的脚本,可打包第三方库)
其实这个问题在网上能搜到大把的解决方案.大家的统一答案都是 otool -L yourapp.app/Contents/MacOS/yourapp 根据输出信息在运行 install_name_too ...