【 声明:版权所有,欢迎转载,请勿用于商业用途。  联系信箱:feixiaoxing @163.com】

原型模式本质上说就是对当前数据进行复制。就像变戏法一样,一个鸽子变成了两个鸽子,两个鸽子变成了三个鸽子,就这么一直变下去。在变的过程中,我们不需要考虑具体的数据类型。为什么呢?因为不同的数据有自己的复制类型,而且每个复制函数都是虚函数。

用C++怎么编写呢,那就是先写一个基类,再编写一个子类。就是这么简单。

class data
{
public:data () {}virtual ~data() {}virtual class data* copy() = 0;
};class data_A : public data
{
public:data_A() {}~data_A() {}class data* copy(){return new data_A();}
};class data_B : public data
{
public:data_B() {}~data_B() {}class data* copy(){return new data_B();}
};

那怎么使用呢?其实只要一个通用的调用接口就可以了。

class data* clone(class data* pData)
{return pData->copy();
}

就这么简单的一个技巧,对C来说,当然也不是什么难事。

typedef struct _DATA
{struct _DATA* (*copy) (struct _DATA* pData);
}DATA;

假设也有这么一个类型data_A,

DATA data_A = {data_copy_A};

既然上面用到了这个函数,所以我们也要定义啊。

struct _DATA* data_copy_A(struct _DATA* pData)
{DATA* pResult = (DATA*)malloc(sizeof(DATA));assert(NULL != pResult);memmove(pResult, pData, sizeof(DATA));return pResult;
};

使用上呢,当然也不含糊。

struct _DATA* clone(struct _DATA* pData)
{return pData->copy(pData);
};

C语言和设计模式(之原型模式)相关推荐

  1. 设计模式回顾——原型模式(C++)

    文章目录 1 前言 2 什么是原型模式 2.1 原型模式组成 2.2 原型模式UML图 2.3 原型模式作用 3 原型模式优缺点 4 什么地方使用原型模式 5 原型模式实现 6 原型模式与构造函数 1 ...

  2. 设计模式(7)[JS版]-JavaScript设计模式之原型模式如何实现???

    目录 1.什么是原型模式 2 参与者 3 实例讲解 4 使用 Object.create实现原型模式 4.1 Object.create()的用法 4.2 用 Object.create实现继承 4. ...

  3. 设计模式之 原型模式

    原型模式应用场景举例:  GG和MM经常在QQ上聊天,但是GG打字的速度慢如蜗牛爬行,每次MM在瞬间完成恢复或者问候是,GG都会很紧张的去尽力快速打字,尽管如此,还是让MM有些不高心,MM说回复信息这 ...

  4. 【GOF23设计模式】原型模式

    [GOF23设计模式]原型模式 来源:http://www.bjsxt.com/  一.[GOF23设计模式]_原型模式.prototype.浅复制.深复制.Cloneable接口  浅复制 1 pa ...

  5. 乐在其中设计模式(C#) - 原型模式(Prototype Pattern)

    [索引页] [源码下载] 乐在其中设计模式(C#) - 原型模式(Prototype Pattern) 作者:webabcd 介绍 用原型实例指定创建对象的种类,并且通过拷贝这个原型来创建新的对象. ...

  6. 教你如何一篇博客读懂设计模式之—--原型模式

    教你如何一篇博客读懂设计模式之----原型模式 what:是什么 原型模式: 用于创建重复的对象,既不用一个属性一个属性去set和get,又不影响性能,原型模式产生的对象和原有的对象不是同一个实例,他 ...

  7. 二十三种设计模式之原型模式

    今天继续探讨GOF二十三种设计模式的原型模式,原型模式也是属于创建型模式的一种 原型模式通俗的讲就是对象复制的过程,即通过一个原型对象,我可以得到一个该对象的克隆. 下面来看下原型模式的第一种写法-- ...

  8. C#设计模式(6)——原型模式(Prototype Pattern)

    一.引言 在软件系统中,当创建一个类的实例的过程很昂贵或很复杂,并且我们需要创建多个这样类的实例时,如果我们用new操作符去创建这样的类实例,这未免会增加创建类的复杂度和耗费更多的内存空间,因为这样在 ...

  9. 设计模式之原型模式(C语言)

    介绍: ​ 原型模式是一种创建型设计模式,使你可以通过复制原型来创建一个一模一样的新的对象,无需考虑创建过程,数据类型等内容: 作用: 创建一个与原型一模一样的对象: 解决问题: 即使原型的状态有所改 ...

  10. 设计模式之原型模式(Prototype)摘录

    23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式包括:1.FactoryMethod(工厂方法模式):2.Abstract Factory(抽象工厂模式):3.Sin ...

最新文章

  1. javascript中this那些事
  2. [转]清华梦的粉碎—写给清华大学的退学申请
  3. java 取日期_java取的日期的操作
  4. python不好的地方_Python 语言中经常有疑惑的地方
  5. windows ping 不通虚拟机
  6. RabbitMQ(三) ——发布订阅
  7. 可选和对象:空指针救星!
  8. 如何使用Alert 组件
  9. 红橙Darren视频笔记 面试题 为什么view获取宽高为0 onCreate onResume view.post源码浅析(继承activity api27)
  10. 英伟达正寻求欧盟批准其收购Arm
  11. linux更改文件属性宁静,shell /dev/null 21 ( linux空设备文件和重定向)
  12. JVM性能调优监控工具专题一:JVM自带性能调优工具(jps,jstack,jmap,jhat,jstat,hprof)...
  13. 【医疗影像处理】脑部MRI影像denoise方法总结[antspy]
  14. 101与金根回顾敏捷个人:(82)《把时间当做朋友》
  15. Python学习之——np.dot()与np.multiply()与*之间的区别
  16. cad修改快捷键_CAD自定义修改快捷键
  17. 一个好用的大文件传输工具
  18. HTTP 出现304情况及详解
  19. 第九周上机项目3:个人所得税计算器
  20. 6行代码实现js打印表格

热门文章

  1. ubuntu磁盘分区问题
  2. java 图像处理两例:图像缩放与圆角图片的制作
  3. 网线(水晶头)制作流程 请附件下载
  4. MPLS ××× Carrier Supporting Carrier Option AB(二)
  5. 设计模式1【续】:动态设定行为
  6. log4net 使用手记
  7. C++获取CPU信息应用经验分享
  8. [转载]WSDL 教程
  9. i++为什么不能作为左值,而++i可以作为左值
  10. python3 开发面试题(面向对象)6.6