设计模式(四)——原型模式详解

  • 定义
  • 结构
  • 实现
  • 案例
  • 浅克隆
  • 深克隆

定义

原型模式就是用一个已经创建的实例作为原型,通过复制该原型对象来创建一个和原型对象相同的对象。

结构

原型模式包含以下角色:

  • 抽象原型类:规定具体原型对象必须实现clone()方法。
  • 具体原型类:实现抽象原型类的clone()方法,它是可被复制的对象。
  • 访问类:使用具体原型中的clone()方法来复制新的对象。

实现

原型模式的克隆分为浅克隆和深克隆

  • 浅克隆:创建一个新对象,新对象的属性和原来对象完全相同,对于非基本类型属性,仍指向原有属性所指向的对象的内存地址

  • 深克隆:创建一个新对象,属性中引用的其他对象也会被克隆,不再指向原有对象地址
    Java中的Object类中提供了 clone() 方法来实现浅克隆。 Cloneable 接口是上面的类图中的抽象原型类,而实现了Cloneable接口的子实现类就是具体的原型类。代码如

设计模式(四)——原型模式详解相关推荐

  1. 设计模式之原型模式详解(附应用举例实现)

    文章目录 1 原型模式介绍 2 原型模式详解 2.1 原型模式结构 2.2 深克隆与浅克隆 2.2.1 浅克隆 2.2.2 深克隆 2.3 原型模式实现 2.3.1 通用实现方法 2.3.2 Java ...

  2. java 肌汉模式_设计模式之原型模式详解(附源代码)

    原型模式(Prototype Pattern) 原型模式(Prototype Pattern)是用于创建重复的对象,同时又能保证性能.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式. ...

  3. 设计模式-值类型与引用类型、深拷贝与浅拷贝、原型模式详解

    一. 值类型和引用类型 1. 前言 (1). 分类 值类型包括:布尔类型.浮点类型(float.double.decimal.byte).字符类型(char).整型(int.long.short等). ...

  4. IoC与DI工厂、单例、原型模式详解

    1.工厂模式 1.1 工厂模式的由来 在现实生活中我们都知道 原始社会自给自足(没有工厂) 农耕社会有了小作坊(简单工厂,如民间酒坊) 工业革命后有了流水线(工厂方法,自产自销) 现代产业链中有代工厂 ...

  5. 设计模式之模板方法模式详解

    设计模式之模板方法模式详解 概述 在面向对象程序设计过程中,程序员常常会遇到这种情况:设计一个系统时知道了算法所需的关键步骤,而且确定了这些步骤的执行顺序,但某些步骤的具体实现还未知,或者说某些步骤的 ...

  6. 设计模式之门面模式详解

    设计模式之门面模式详解 文章目录 设计模式之门面模式详解 一.什么是门面模式 二.门面模式的应用场景 三.门面模式的角色组成 四.门面模式通用写法 五.门面模式在业务中的应用 六.门面模式优缺点 一. ...

  7. 设计模式之桥接模式详解

    设计模式之桥接模式详解 文章目录 设计模式之桥接模式详解 一.什么是桥接模式 二.桥接模式的应用场景 三.桥接模式的角色组成 四.桥接模式通用写法示例 五.桥接模式优缺点 一.什么是桥接模式 桥接模式 ...

  8. 设计模式——模版方法模式详解(论沉迷LOL对学生的危害)

    0. 前言 写在最前面,本人的设计模式类博文,建议先看博文前半部分的理论介绍,再看后半部分的实例分析,最后再返回来复习一遍理论介绍,这时候你就会发现我在重点处标红的用心,对于帮助你理解设计模式有奇效哦 ...

  9. 设计模式之策略模式详解

    设计模式之策略模式详解 概述 先看下面的图片,我们去旅游选择出行模式有很多种,可以骑自行车.可以坐汽车.可以坐火车.可以坐飞机. 作为一个程序猿,开发需要选择一款开发工具,当然可以进行代码开发的工具有 ...

最新文章

  1. aptana手动配置python环境_Aptana Studio 3中通过Auto Config配置PyDev中Python出错
  2. 查看TensorFlow的版本和路径
  3. 很高兴加入51cto——交朋友
  4. Postman 最被低估的功能
  5. 数据库表设计、 数据库分层、myslq水平拆分、oracle表分区
  6. 8750H带的动MATLAB2019吗,[多图]九代i7-9750H笔记本标压处理器与前代8750H性能对比
  7. 收到有关RabbitMQ集群分区的通知
  8. Python 库的使用 —— dis
  9. py获取前端的参数_Python小工具系列(3)之参数检查
  10. 【Visual C++】游戏开发笔记二十六 DirectX 11各组件的介绍第一个DirectX 11 Demo的创建
  11. 粤语翻译软件开发_粤语翻译器 带发音-粤语翻译器 带发音免费软件app安卓v2.3下载-SLY软件园...
  12. angular2 + XLSX 导出一张工作簿中包含多张表格
  13. 战网在线更改服务器,暴雪的“战网”是如何从无到有 并改变了在线游戏的?...
  14. Unity实现AR扫描图片
  15. 数仓建模—数据治理的本质与实践
  16. 【原创】Windows Docker 设置阿里云镜像加速
  17. 什么是多芯光纤?软光纤、集束光纤、紧套光纤是光纤吗?
  18. java 获取系统分隔符_java 根据系统获取文件分隔符
  19. Flash+XML实现电子地图查询及定位功能
  20. c语言如何标志置1与置0,c语言对于文本的基本操作

热门文章

  1. android 隐藏或修改EditText 光标下水滴状图标
  2. zynq linux打印乱码,使用vivado2019.2和petalinux 2019.2制作带无线wifi的ultra96v2
  3. 什么叫TLD、gTLD、nTLD、ccTLD、iTLD 以及几者之间的关系
  4. 英语害怕的,受威胁的
  5. tinyxml2创建、读取、修改文件通用操作
  6. 什么是视距传播?如何实现高效微波点对点传输视距验证?
  7. 锤子手机安装 linux,1.认识Linux并创建虚拟机来安装CentOS7
  8. 【genius_platform软件平台开发】第四十二讲:18年开发微信小游戏的时候碰碰车服务器端源码免费贡献
  9. 软件测试——黑盒测试
  10. Java程序员从笨鸟到菜鸟之(一百零九)一步一步学习webservice(三)开发第一个基于XFire的webservi