在我们生活中一些事物总有它它特有的属性、像论文、建立、求职信等、都有其固有的格式来书写,下面咱咱用简历来实现咱原型模式的实现。

当咱书写一份简历时,必须要有姓名、可以设计性别、年龄、可以设置工作经历,最终咱们就可以利用这个固定的模式来书写简历。

简历的初步代码实现如下:



这里面客户端用到两份简历、我们需要实例化两次,这样你会不会觉得在客户端很麻烦,假如我们需要二十份简历的话,那我们至少需要实例化29次了啊,这倒不是很严重的,假如我们要将98年改成99年,那我们就要改二十次了,

好到此我们该是原型模式出场的时候了,因为所有的简历的格式是固定的,原型模式,用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。

简单的说原型模式就是从一个对象在创建另外一个可定制的对象,而且不需要知道任何创建的细节,我们来来改改上面的代码

在原型类中:


对于.net而言,那个原型抽象类prototype是用不着的,因为克隆实在是太常用的,所以在.NET中已经提供了一个命名空间在system中icloneable接口,其中就有一个唯一的一个方法clone(),我们在是使用的时候只需要调用接口可以完成原型模式了。

代码更改如下:



这样一改代码就清爽了很多,而且要是想改某份简历,只需要对这份简历做一定的更改就可以了,不会影响到其他的简历,相同的部分就不会再重复了,在性能上也是大大的提高,每当我们new一次,都需要执行一次构造函数,如果构造函数的执行时间很长那么多次的执行这个初始化操做就实在太低效率,一般在初始化的信息不发生变化的情况下,克隆是最好的办法,这既隐藏了对象创建的细节,有对性能是大大的提高。他不等于是不用初始化的对象,而是动态的获得对象运行时的状态。

但是在咱简历中,对象的数据都是string型的,也就是值类型,memberwiseclone()方法是这样,如果字段是值类型的,则对该字段执行逐位复制,如果字段是引用类型,则复制引用但不复制引用的对象,因此,原始对象及其复本引用同一对象,也就是对“简历”类中对象引用,那么引用的对象数据是不会被克隆过来的。

这里面牵扯到一个复制的概念:浅表复制、深层复制

浅表复制:被复制对象的所有变量的都含有与原来的对象相同的值,而所有的对其他对象引用都仍然指向原来的对象,但是我们可能需要这样的一种需求,把复制对象引用的对象都复制一遍,这就应用到了深复制,深复制把引用对象变量指向复制过的新对象,而不是原有的引用的对象,

下面通过一个例子分析出里面的不同:




这种方式我们显示的值为:

这里面我们可以看到在工作经验的时候显示的值都为一致的。因为这里面是值引用,就是说在里面引用的对象都是指向同一个实例。

咱再看另外一个同样的程序:





这个程序实现的结果:

这样就能实现工作经验的复制,因为在工作经验中就又能力的复制。

其实在深层复制我们实现起来是通过序列化来实现的。嘿嘿、写篇日志分析此处

设计模式(7) 续原型模式相关推荐

  1. Java描述设计模式(05):原型模式

    一.原型模式简介 1.基础概念 原型模式属于对象的创建模式.通过给出一个原型对象来指明所有创建的对象的类型,然后用复制这个原型对象的办法创建出更多同类型的对象. 2.模式结构 原型模式要求对象实现一个 ...

  2. 设计模式学习笔记-原型模式

    一.概述 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象: 二.模式中的角色 Prototype:声明一个克隆自身的接口: ConcretePrototype:实现一个克隆自身的操作: ...

  3. 【设计模式 06】原型模式(克隆??)

    原型模式(clone?) Prototype pattern refers to creating duplicate object while keeping performance in mind ...

  4. java 设计模式 优缺点_java设计模式2:原型模式(机制\优缺点分析\使用场景)...

    1. 原型模式实现机制 原型模式在设计模式中相对比较简单,它直接通过实现 Cloneable接口,再重写 clone()方法返回想要的对象就OK 了. 一起来看下代码 : public class P ...

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

    原型模式 原型模式属于对象的创建模式,通过给出一个原型对象来指明所有创建的对象的类型,然后用复制这个原型对象的办法创建出更多同类型的对象,这就是原型模式的用意. 原型模式结构 原型模式要求对象实现一个 ...

  6. 设计模式之【原型模式】,深入理解深拷贝与浅拷贝

    文章目录 一.什么是原型模式 二.原型模式实现方式 1.传统方式 2.原型模式 熟悉浅拷贝和深拷贝 浅拷贝实现对象克隆 深拷贝实现对象克隆 一.什么是原型模式 原型模式: 用一个已经创建的实例作为原型 ...

  7. 【设计模式自习室】原型模式

    前言 <设计模式自习室>系列,顾名思义,本系列文章带你温习常见的设计模式.主要内容有: 该设计模式的详细介绍,包括: 引子,意图(大白话解释) 类图,时序图(理论规范) 该模式的代码示例: ...

  8. java设计模式之五(原型模式)

    什么是原型模式? 原型模式(Prototype Pattern)是用于创建重复的对象,同时又能保证性能.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式. 当我们程序中有几个相似但又不 ...

  9. 设计模式 之美 -- 原型模式

    文章目录 1. 解决问题 2. 应用场景 3. 实现方式 C++实现 C语言实现 4. 缺点 5. 和其他三种创建模式的对比(单例,工厂,建造者) 1. 解决问题 如果对象的创建成本较大,而同一个类的 ...

最新文章

  1. Linux下多线程编程互斥锁和条件变量的简单使用
  2. Kraken:使用精确比对的超快速宏基因组序列分类软件
  3. 轻松解决Windows7声卡驱动不全问题
  4. 广度优先搜索_广度优先搜索(BFS)
  5. camera tweak android,苹果iPhone相机大提升 CameraTweak2超强大的拍照增强插件
  6. c语言告白,C语言告白代码,一闪一闪亮晶晶~
  7. 转载:性能计数器分析
  8. python def函数报错详解_JSer 快速入门 Python 之函数详解
  9. 使用HTML注释标签,超详细的HTML !–…– 注释标签使用实例.pdf
  10. 如何迅速的找到合适的开发者?
  11. UTM投影坐标计算距离
  12. 基于遗传算法车辆路径问题(VRP)
  13. c语言编码菱形,C语言输出菱形代码及解析
  14. SDCC编译器简明使用教程
  15. 《形式感+——网页视觉设计创意拓展与快速表现》
  16. mysql5.7 报错1055_MySql5.7 报错 1055
  17. 如果写不好 SQL,有没有好用的报表软件?
  18. 【SDU项目实训2019级】前端和后端实现手机短信验证码登录和注册功能
  19. gh-ost封装脚本
  20. 解决ftp 出现Passive mode refused的办法

热门文章

  1. FinSpy 发布 Mac 和 Linux OS 版本攻击埃及组织机构
  2. 奇怪,勒索软件Ryuk 新版本把这些 *UNIX 文件夹列入了黑名单
  3. SQL SERVER 如何把1列多行数据 合并成一列显示
  4. 动态生成圈形+文字的图片
  5. 苹果iPhone XI新爆料:用了被小米当噱头的TOF技术
  6. Socket开发框架之框架设计及分析
  7. Django完整的开发一个博客系统
  8. scala.Enumeration 枚举示例
  9. 假期要如何过才有意义
  10. 脾虚怎么办?7招驯服“脾”气-转