Prototype设计模式之原形模式

Demo地址

https://github.com/rocky123shine/RockyPrototype

概念

原型模式又称为克隆模式。
用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。

克隆

概念

简单的说,克隆就是通过对象A复制一份给B,目的是B有A的属性。克隆和new 出来对象,再赋值的区别是,克隆A生成B的过程直接把A的属性赋值给了B,而new出来的是B是 初始没有值。

克隆的使用场景

在开发的过程中,有时候我们有这种需求:有一个对象A,在某一时刻A中已经包含了一些有效值,此时可能会需要一个和A完全相同新对象B,并且此后对B任何改动都不会影响到A中的值,也就是说,A与B是两个独立的对象,但B的初始值是由A对象确定。
到此 会有人说 java中的赋值就可以实现,何必多此一举来个克隆呢?其实不然,我们赋值基本数据类型是完全没有问题,一旦复制对象中有非基本数据类型,那么赋值之后的对象和原有对象共同指向非基本数据类型所在的内存空间。这时候复制出的对象 一旦改了非基本数据类型,那么原有的非基本数据类型也被修改,这也就是我们所说的浅克隆,要想完全实现复制对象修改内容不修改原来内容,就需要实现深克隆

1.浅克隆

对于要克隆的对象,对于其基本数据类型的属性,复制一份给新产生的对象,对于非基本数据类型的属性,仅仅复制一份引用给新产生的对象,即新产生的对象和原始对象中的非基本数据类型的属性都指向的是同一个对象

1.1 浅克隆实现

1.1.1 实现java.lang.Cloneable接口
1.1.2 重写java.lang.Object.clone()方法

//实现接口
public class B implements Cloneable {   //重写方法   public Object clone() {   try {   return super.clone();   } catch (CloneNotSupportedException e) {   return null;   }   }
}  

2.深克隆

在浅度克隆的基础上,对于要克隆的对象中的非基本数据类型的属性对应的类,也实现克隆,这样对于非基本数据类型的属性,复制的不是一份引用,即新产生的对象和原始对象中的非基本数据类型的属性指向的不是同一个对象

2.1 深克隆实现

2.1.1 实现java.lang.Cloneable接口
2.1.2 重写java.lang.Object.clone()方法

//实现接口
public class B implements Cloneable {
...//重写方法   public Object clone() {   try {   return super.clone();   } catch (CloneNotSupportedException e) {   return null;   }   }
}  //实现接口
public class A implements Cloneable {
...private B b;   //重写方法   public Object clone() {   try {   return super.clone();   } catch (CloneNotSupportedException e) {   return null;   }   }
}

设计模式之原形模式(克隆模式)相关推荐

  1. 【学习笔记】设计模式-原型模式/克隆模式(Prototype)

    文章目录 0 设计模式 1 原型模式 2 实现思路 2.1 浅克隆 2.2 深克隆 3 需要的类 4 具体实现 4.1 浅克隆 4.2 深克隆 5 思维导图 6 示例源码地址 最后 0 设计模式 不了 ...

  2. 设计模式--第七章 克隆模式

    第七章 克隆模式 1. 核心思想 2. UML类图 3. 框架代码 4. 优缺点 5. 应用场景 1. 核心思想 用原型实例指定要创建对象的种类,并通过拷贝这些原型的属性来创建新的对象. 通过拷贝自身 ...

  3. 原型模式(克隆模式):浅谈浅克隆与深克隆

    克隆是什么?它的产生背景? 当new的对象是多例的时候,new对象将会不断占据内存.特别是消耗内存的大对象,比如数据库连接等.平时运用的不多,只在spring等容器有见过,此处不多赘述,了解即可. 浅 ...

  4. [19/04/24-星期三] GOF23_创建型模式(建造者模式、原型模式)

    一.建造者模式 本质:分离了对象子组件的单独构造(由Builder负责)和装配的分离(由Director负责),从而可以构建出复杂的对象,这个模式适用于:某个对象的构建过程十分复杂 好处:由于构建和装 ...

  5. 设计模式系列——克隆模式

    设计模式系列--克隆模式 前言 native关键字 原型模式适用的场景 原型模式的应用 原型模式实战 浅克隆 深克隆 前言 在我们工作中经常能遇到大幅度使用get或set方法,例如下面这样的代码 pu ...

  6. 克隆模式java_java基础之----23种设计模式(克隆模式)

    概述 克隆模式是一种比较简单的设计模式,基本从字面意思就可以明白这种设计模式是干什么的,简单来说就是造一个和原来一模一样的对象,就叫克隆模式.克隆模式分为两种,一种是浅度克隆,一种是深度克隆,至于这两 ...

  7. 设计模式GOF23——克隆模式

    克隆模式(protopyte)是创建者模式的一种,是一种负责创建对象的模式.也叫原型模式 模式的应用场景 创建一个对象需要非常繁琐的数据准备或者访问权限,为了节省时间,可以使用克隆模式. 克隆模式就是 ...

  8. 《Head First 设计模式》读书笔记六--克隆模式

    克隆模式 简介 深入理解克隆模式,出现的意义在于反复创建一样的对象,影响JAVA程序的效率. 克隆模式的优势在于底层调用了C,实现了内存之间的复制. 克隆模式区分: 1.浅克隆:在复制对象的时候里面的 ...

  9. Java设计模式之五大创建型模式(附实例和详解)

    一.概况 总体来说设计模式分为三大类: (1)创建型模式,共五种:工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型模式. (2)结构型模式,共七种:适配器模式.装饰器模式.代理模式.外观模式.桥 ...

最新文章

  1. SAP S4 BP事务代码的业务伙伴和供应商,客户之间的表关系
  2. php isset()与empty()详解
  3. jbpm4.4基础知识
  4. 输入一个链表,反转链表后,输出新链表的表头。
  5. 机器学习(周志华)- 第2章模型评估与选择笔记
  6. Java环境变量CLASSPATH详解
  7. OpenStack securityGroup rule Set
  8. 中山计算机辅助设计报考,中山模具设计与CNC数控编程专业
  9. 一段和别人的对话,没事写出来(杂项)
  10. ETL(SSIS)组件使用
  11. html表格中间有空白,word文档表格中间出现空白怎么解决
  12. 城市售票网关于使用selenium撞库的一点心得,可以在抢票时间卡进去
  13. Python使用正则表达式爬取网站图片信息
  14. 学习笔记之——Python中类和对象的理解
  15. Keil编译警告汇总(持续更新。。。)
  16. 流体力学控制方程——能量方程
  17. aoa计算机二级word单项操作,计算机二级AOA word单项操作
  18. 浅谈Linux PCI设备驱动(二)
  19. 怎么把mp4转换成gif格式?在线转换方法
  20. 咳咳咳。继续编下去,等未来的我来嘲讽现在的我,百度圣典内部函数归类总结

热门文章

  1. 升级win10后 每次电脑休眠后再打开笔记本风扇狂转
  2. java中implements
  3. 【windows下】带绘图功能的截图软件
  4. (四)DSP28335基础教程——SCI串口通信实验(上位机收发显示)
  5. Thingsboard集成TDengine
  6. 5年java程序员述职报告_一个5年Java程序员的年终总结,献给还在迷茫中的你
  7. poi3.9之读写2010 word/excel/ppt
  8. 大话西游无法登陆解决
  9. Symantec SSL证书被Digicert收购后的变化
  10. 重装战姬显示未连接到服务器,《重装战姬》常见问题FAQ大全 公测常见问题汇总解答...