设计模式(四)——原型模式详解
设计模式(四)——原型模式详解
- 定义
- 结构
- 实现
- 案例
- 浅克隆
- 深克隆
定义
原型模式就是用一个已经创建的实例作为原型,通过复制该原型对象来创建一个和原型对象相同的对象。
结构
原型模式包含以下角色:
- 抽象原型类:规定具体原型对象必须实现clone()方法。
- 具体原型类:实现抽象原型类的clone()方法,它是可被复制的对象。
- 访问类:使用具体原型中的clone()方法来复制新的对象。
实现
原型模式的克隆分为浅克隆和深克隆。
浅克隆:创建一个新对象,新对象的属性和原来对象完全相同,对于非基本类型属性,仍指向原有属性所指向的对象的内存地址。
深克隆:创建一个新对象,属性中引用的其他对象也会被克隆,不再指向原有对象地址。
Java中的Object类中提供了clone()
方法来实现浅克隆。 Cloneable 接口是上面的类图中的抽象原型类,而实现了Cloneable接口的子实现类就是具体的原型类。代码如
设计模式(四)——原型模式详解相关推荐
- 设计模式之原型模式详解(附应用举例实现)
文章目录 1 原型模式介绍 2 原型模式详解 2.1 原型模式结构 2.2 深克隆与浅克隆 2.2.1 浅克隆 2.2.2 深克隆 2.3 原型模式实现 2.3.1 通用实现方法 2.3.2 Java ...
- java 肌汉模式_设计模式之原型模式详解(附源代码)
原型模式(Prototype Pattern) 原型模式(Prototype Pattern)是用于创建重复的对象,同时又能保证性能.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式. ...
- 设计模式-值类型与引用类型、深拷贝与浅拷贝、原型模式详解
一. 值类型和引用类型 1. 前言 (1). 分类 值类型包括:布尔类型.浮点类型(float.double.decimal.byte).字符类型(char).整型(int.long.short等). ...
- IoC与DI工厂、单例、原型模式详解
1.工厂模式 1.1 工厂模式的由来 在现实生活中我们都知道 原始社会自给自足(没有工厂) 农耕社会有了小作坊(简单工厂,如民间酒坊) 工业革命后有了流水线(工厂方法,自产自销) 现代产业链中有代工厂 ...
- 设计模式之模板方法模式详解
设计模式之模板方法模式详解 概述 在面向对象程序设计过程中,程序员常常会遇到这种情况:设计一个系统时知道了算法所需的关键步骤,而且确定了这些步骤的执行顺序,但某些步骤的具体实现还未知,或者说某些步骤的 ...
- 设计模式之门面模式详解
设计模式之门面模式详解 文章目录 设计模式之门面模式详解 一.什么是门面模式 二.门面模式的应用场景 三.门面模式的角色组成 四.门面模式通用写法 五.门面模式在业务中的应用 六.门面模式优缺点 一. ...
- 设计模式之桥接模式详解
设计模式之桥接模式详解 文章目录 设计模式之桥接模式详解 一.什么是桥接模式 二.桥接模式的应用场景 三.桥接模式的角色组成 四.桥接模式通用写法示例 五.桥接模式优缺点 一.什么是桥接模式 桥接模式 ...
- 设计模式——模版方法模式详解(论沉迷LOL对学生的危害)
0. 前言 写在最前面,本人的设计模式类博文,建议先看博文前半部分的理论介绍,再看后半部分的实例分析,最后再返回来复习一遍理论介绍,这时候你就会发现我在重点处标红的用心,对于帮助你理解设计模式有奇效哦 ...
- 设计模式之策略模式详解
设计模式之策略模式详解 概述 先看下面的图片,我们去旅游选择出行模式有很多种,可以骑自行车.可以坐汽车.可以坐火车.可以坐飞机. 作为一个程序猿,开发需要选择一款开发工具,当然可以进行代码开发的工具有 ...
最新文章
- aptana手动配置python环境_Aptana Studio 3中通过Auto Config配置PyDev中Python出错
- 查看TensorFlow的版本和路径
- 很高兴加入51cto——交朋友
- Postman 最被低估的功能
- 数据库表设计、 数据库分层、myslq水平拆分、oracle表分区
- 8750H带的动MATLAB2019吗,[多图]九代i7-9750H笔记本标压处理器与前代8750H性能对比
- 收到有关RabbitMQ集群分区的通知
- Python 库的使用 —— dis
- py获取前端的参数_Python小工具系列(3)之参数检查
- 【Visual C++】游戏开发笔记二十六 DirectX 11各组件的介绍第一个DirectX 11 Demo的创建
- 粤语翻译软件开发_粤语翻译器 带发音-粤语翻译器 带发音免费软件app安卓v2.3下载-SLY软件园...
- angular2 + XLSX 导出一张工作簿中包含多张表格
- 战网在线更改服务器,暴雪的“战网”是如何从无到有 并改变了在线游戏的?...
- Unity实现AR扫描图片
- 数仓建模—数据治理的本质与实践
- 【原创】Windows Docker 设置阿里云镜像加速
- 什么是多芯光纤?软光纤、集束光纤、紧套光纤是光纤吗?
- java 获取系统分隔符_java 根据系统获取文件分隔符
- Flash+XML实现电子地图查询及定位功能
- c语言如何标志置1与置0,c语言对于文本的基本操作
热门文章
- android 隐藏或修改EditText 光标下水滴状图标
- zynq linux打印乱码,使用vivado2019.2和petalinux 2019.2制作带无线wifi的ultra96v2
- 什么叫TLD、gTLD、nTLD、ccTLD、iTLD 以及几者之间的关系
- 英语害怕的,受威胁的
- tinyxml2创建、读取、修改文件通用操作
- 什么是视距传播?如何实现高效微波点对点传输视距验证?
- 锤子手机安装 linux,1.认识Linux并创建虚拟机来安装CentOS7
- 【genius_platform软件平台开发】第四十二讲:18年开发微信小游戏的时候碰碰车服务器端源码免费贡献
- 软件测试——黑盒测试
- Java程序员从笨鸟到菜鸟之(一百零九)一步一步学习webservice(三)开发第一个基于XFire的webservi