一、概念

  为了提高效率,我们经常会采用复制的方式,这样不用一点一点的从头开始进行(初始化新对象),直接利用结果就好(动态的获得对象运行时的状态)。

  前几天我做演讲的ppt,就有偷懒之嫌~ 把大家的优秀博客,截图然后copy到ppt当中,这样免去了重新构思这一环节,高质量(大家的功劳 O(∩_∩)O~),高效率。

  设计模式中也不乏类似功能的模式。原型模式便是其中之一。

  原型模式(Prototype):用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。不需要知道任何创建的细节。

二、UML图

客户(Client)对象:使用原型对象的客户程序

抽象原型(Prototype)对象:声明了克隆自身,且具体原型对象必须实现的接口(如果是深复制,必须有实现clone的规定)。

具体类型(ConcretePrototype)对象:从抽象原型派生而来,是客户程序使用的对象,即被复制的对象。此角色需要实现抽象原型角色所要求的接口,实现一个克隆自身的操作。

三、实例解析

  学习了设计模式之后,小M终于有了一份工作(满18了,木有非法使用童工。。)。为了获得更多推销自己的机会,她设计了一张自己的名片,包含的信息有:姓名 性别 年龄 电话。但是一张名片送人之后,就再也没有了,所以她通过原型模式又给自己copy了几张。

   //客户端代码class Program{static void Main(string[] args){ConcreteBussinessCard bc = new ConcreteBussinessCard("小M");bc.SetPersonalInfo("女","18","12345678901");//克隆类ConcreteBussinessCard的对象bc就能得到新的实例bc1ConcreteBussinessCard bc1 = (ConcreteBussinessCard)bc.Clone();bc1.SetPersonalInfo("女", "18", "12345678901");bc.Display();bc1.Display();Console.Read();}}
    //抽象名片类abstract class BussinessCard{//定义名片包含信息:姓名,性别,年龄,电话号码为私有变量private string name;      private string sex;private string age;  private string phoneNumber; //构造函数public BussinessCard(string name){this.name = name;           }//设置个人信息public void SetPersonalInfo(string sex, string age,string phoneNumber){this.sex = sex;this.age = age;this.phoneNumber = phoneNumber;}//显示public void Display(){Console.WriteLine("姓名:{0}  性别:{1}  年龄:{2}",name ,sex ,age );Console.WriteLine(" 电话:{0}",phoneNumber );}//关键是这里有一个Clone方法public abstract BussinessCard Clone();}
    //具体名片类class ConcreteBussinessCard : BussinessCard{public ConcreteBussinessCard(string name): base(name){ }public override BussinessCard Clone(){return (BussinessCard)this.MemberwiseClone();//创建当前的浅表副本。}}}

运行结果:

四、深复制和浅复制

  背景:MemberwiseClone()方法是这样,如果字段是值类型的,则对该字段执行逐位复制,如果字段是引用类型,则复制引用但不复制引用的对象;因此,原始对象及其复本引用同一对象。

浅复制:被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用都仍然指向原来的对象。

深复制:把引用对象的变量指向复制过的新对象,而不是原有的被引用的对象。

五、总结

  原型模式能够简化代码,优化设计,让我们摆脱了手工抄写的时代。代码同样可以推动社会进步!

Ps:对深复制和浅复制的理解还很浅,看了一些大牛的博客,也不是很明白,期待大家的点拨!

【大话设计模式】—— 原型模式相关推荐

  1. 大话设计模式—原型模式

    原型模式(Prototype Pattern),用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象:即用于创建重复的对象,同时又能保证性能.这种类型的设计模式属于创建型模式,它提供了一种创建 ...

  2. 大话设计模式-原型模式的浅复制与深复制

    在看这个原型模式的时候,不知你是否有和博主一样的迷茫.诶,这里不是复制对象,怎么改属性并不是全部对象都改

  3. linkin大话设计模式--常用模式总结

    linkin大话设计模式--常用模式总结 一,常用设计模式定义 Abstract Factory(抽象工厂模式):提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类. Adapter( ...

  4. 设计模式 原型模式_创新设计模式:原型模式

    设计模式 原型模式 原型模式用于创建对象的副本. 这种模式非常有用,特别是当从头开始创建对象的成本很高时. 与builder , factory和abstract factory模式相比,它不会从头开 ...

  5. 设计模式 原型模式_设计模式:原型

    设计模式 原型模式 创新设计模式之一是原型设计模式 . 尽管原型是创造模式,但它在概念上与其他模式有所区别. 我的意思是原型在某种意义上创造了自己. 我将在下面解释. 原型模式的所有魔力都基于Java ...

  6. 设计模式 原型模式_原型设计模式:创建另一个小车

    设计模式 原型模式 创建对象确实是一个耗时的过程,也是一件昂贵的事情. 因此,我们现在正冒险节省时间和金钱. 我们该怎么做? 克隆奇迹多莉 有人记得多莉吗? 是的,是绵羊,是第一个被克隆的哺乳动物. ...

  7. Java常用设计模式————原型模式(一)

    介绍 原型模式(Prototype Pattern):用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象. 原型模式用于创建重复的对象,同时又能保证性能.当直接创建对象的代价比较大时,则采用 ...

  8. 第六章 Caché 设计模式 原型模式

    文章目录 第六章 Caché 设计模式 原型模式 定义 使用场景 优点 结构图 描述 示例 初级写法 缺点 中级写法 缺点 高级写法 (浅复制) 浅复制 深复制 完整示例 简历类(复制类) 对象类(工 ...

  9. C++设计模式——原型模式(Prototype Pattern)

    C++设计模式--原型模式(Prototype Pattern) 微信公众号:幼儿园的学霸 目录 文章目录 C++设计模式--原型模式(Prototype Pattern) 目录 定义 代码示例 普通 ...

  10. linkin大话设计模式--桥接模式

    linkin大话设计模式--桥接模式 桥接模式是一种结构化模式,他主要应对的是:由于实际的需要,某个类具有2个或者2个以上维度的变化,如果只是使用继承将无法实现功能,或者会使得设计变得相当的臃肿.我们 ...

最新文章

  1. csdn新版博客初体验
  2. 区分 UML 类图中的几种关系
  3. 3 命名空间与命名规范
  4. python只能对列表进行切片_Python3:类型错误:列表索引必须是整数或切片,而不是s...
  5. comsol固体传热_【 COMSOL 知识库】如何解决 COMSOL 软件“内存不足” 的问题
  6. 《C程序设计语言》(第二版)要点总结
  7. iis下php 500错误
  8. Flash MX 2004 中的文本遮罩
  9. 爬虫_抓取51job招聘数据
  10. asp.net中英文转换
  11. ROS1云课→22机器人轨迹跟踪
  12. java 吃豆豆游戏背景底纹_java swing开发简单的大鱼吃豆子小游戏,可用于毕业设计(附详细设计文档)...
  13. 室温金刚石共聚焦平台
  14. Java EE开发系列教程 - 使用EJB组件与JPA层交互
  15. 世界上最会“算计”的公司争相布局区块链,普华永道等四大会计师事务所的变革之路...
  16. 胃肠道微生物与癌症有关
  17. arcgis把jpg转成栅格图像_]在ArcGIS中配准(TIF、JPEG)栅格图像并矢量化(转)
  18. 英文文档翻译软件-汉语文章翻译成英语
  19. lamp 架构的搭建
  20. TCP 为什么需要三次握手?

热门文章

  1. 软件测试的艺术_全书读书笔记
  2. 内存泄露与内存溢出的区别及解决方法
  3. SMIT快捷命令总结
  4. 清华70%的高考状元去哪了
  5. 夺命追击(Murderous Pursuits)服务器搭建教程
  6. 关于 JavaScript 学习,一些好的博客或者网站
  7. element表格多列排序_vue表格树状结构的实现
  8. php对于5g云桌面前景,5G覆盖时代对云桌面发展的影响有哪些?
  9. [精品毕设]微信小程序的投票系统问卷调查+后台管理系统
  10. 计算机视觉三大会议论文,计算机视觉顶级会议CVPR2021 最新出炉的最佳paper,陆续更新中...(附论文地址)...