克隆羊问题

现在有一只羊tom,姓名为: tom, 年龄为:1,颜色为:白色,请编写程序创建和tom羊 属性完全相同的10只羊。

传统方式解决克隆羊问题

传统的方式的优缺点

1) 优点是比较好理解,简单易操作。

2) 在创建新的对象时,总是需要重新获取原始对象的属性,如果创建的对象比较复杂时,效率较低

3) 总是需要重新初始化对象,而不是动态地获得对象运行时的状态, 不够灵活

4) 改进的思路分析

思路:Java中Object类是所有类的根类,Object类提供了一个clone()方法,该方法可以将一个Java对象复制一份,但是需要实现clone的Java类必须要实现一个接口Cloneable,该接口表示该类能够复制且具有复制的能力 => 原型模式

更多Java –大数据 – 前端 – UI/UE - Android - 人工智能资料下载,可访问百度:尚硅谷官网www.atguigu.com

原型模式基本介绍

1) 原型模式(Prototype模式)是指:用原型实例指定创建对象的种类,并且通过拷贝这些原型,创建新的对象

2) 原型模式是一种创建型设计模式,允许一个对象再创建另外一个可定制的对象,无需知道如何创建的细节_java培训

3) 工作原理是:通过将一个原型对象传给那个要发动创建的对象,这个要发动创建的对象通过请求原型对象拷贝它们自己来实施创建,即 对象.clone()

4) 形象的理解:孙大圣拔出猴毛, 变出其它孙大圣

原型模式原理结构图-uml类图

原理结构图说明

1) Prototype : 原型类,声明一个克隆自己的接口

2) ConcretePrototype: 具体的原型类, 实现一个克隆自己的操作

3) Client: 让一个原型对象克隆自己,从而创建一个新的对象(属性一样)

原型模式解决克隆羊问题的应用实例

使用原型模式改进传统方式,让程序具有更高的效率和扩展性。

原型模式在Spring框架中源码分析

1) Spring中原型bean的创建,就是原型模式的应用

2) 代码分析+Debug源码

深入讨论-浅拷贝和深拷贝

浅拷贝的介绍

1) 对于数据类型是基本数据类型的成员变量,浅拷贝会直接进行值传递,也就是将该属性值复制一份给新的对象。

2) 对于数据类型是引用数据类型的成员变量,比如说成员变量是某个数组、某个类的对象等,那么浅拷贝会进行引用传递,也就是只是将该成员变量的引用值(内存地址)复制一份给新的对象。因为实际上两个对象的该成员变量都指向同一个实例。在这种情况下,在一个对象中修改该成员变量会影响到另一个对象的该成员变量值

3) 前面我们克隆羊就是浅拷贝

4) 浅拷贝是使用默认的 clone()方法来实现

sheep = (Sheep) super.clone();

更多Java –大数据 – 前端 – UI/UE - Android - 人工智能资料下载,可访问百度:尚硅谷官网www.atguigu.com

深拷贝基本介绍

1) 复制对象的所有基本数据类型的成员变量值

2) 为所有引用数据类型的成员变量申请存储空间,并复制每个引用数据类型成员变量所引用的对象,直到该对象可达的所有对象。也就是说,对象进行深拷贝要对整个对象进行拷贝

3) 深拷贝实现方式1:重写clone方法来实现深拷贝

4) 深拷贝实现方式2:通过对象序列化实现深拷贝(推荐)

原型模式的注意事项和细节

1) 创建新的对象比较复杂时,可以利用原型模式简化对象的创建过程,同时也能够提高效率

2) 不用重新初始化对象,而是动态地获得对象运行时的状态

3) 如果原始对象发生变化(增加或者减少属性),其它克隆对象的也会发生相应的变化,无需修改代码

4) 在实现深克隆的时候可能需要比较复杂的代码

5) 缺点:需要为每一个类配备一个克隆方法,这对全新的类来说不是很难,但对已有的类进行改造时,需要修改其源代码,违背了ocp原则,这点请同学们注意.

北京Java培训 | java设计模式之原型模式相关推荐

  1. Java二十三设计模式之-----原型模式

    一.原型模式(Prototype) 原型模式虽然是创建型的模式,但是与工程模式没有关系,从名字即可看出,该模式的思想就是将一个对象作为原型,对其进行复制.克隆,产生一个和原对象类似的新对象.本小结会通 ...

  2. 【GOF23设计模式】原型模式

    [GOF23设计模式]原型模式 来源:http://www.bjsxt.com/  一.[GOF23设计模式]_原型模式.prototype.浅复制.深复制.Cloneable接口  浅复制 1 pa ...

  3. 设计模式之 原型模式

    原型模式应用场景举例:  GG和MM经常在QQ上聊天,但是GG打字的速度慢如蜗牛爬行,每次MM在瞬间完成恢复或者问候是,GG都会很紧张的去尽力快速打字,尽管如此,还是让MM有些不高心,MM说回复信息这 ...

  4. 乐在其中设计模式(C#) - 原型模式(Prototype Pattern)

    [索引页] [源码下载] 乐在其中设计模式(C#) - 原型模式(Prototype Pattern) 作者:webabcd 介绍 用原型实例指定创建对象的种类,并且通过拷贝这个原型来创建新的对象. ...

  5. 教你如何一篇博客读懂设计模式之—--原型模式

    教你如何一篇博客读懂设计模式之----原型模式 what:是什么 原型模式: 用于创建重复的对象,既不用一个属性一个属性去set和get,又不影响性能,原型模式产生的对象和原有的对象不是同一个实例,他 ...

  6. 二十三种设计模式之原型模式

    今天继续探讨GOF二十三种设计模式的原型模式,原型模式也是属于创建型模式的一种 原型模式通俗的讲就是对象复制的过程,即通过一个原型对象,我可以得到一个该对象的克隆. 下面来看下原型模式的第一种写法-- ...

  7. C#设计模式(6)——原型模式(Prototype Pattern)

    一.引言 在软件系统中,当创建一个类的实例的过程很昂贵或很复杂,并且我们需要创建多个这样类的实例时,如果我们用new操作符去创建这样的类实例,这未免会增加创建类的复杂度和耗费更多的内存空间,因为这样在 ...

  8. 设计模式回顾——原型模式(C++)

    文章目录 1 前言 2 什么是原型模式 2.1 原型模式组成 2.2 原型模式UML图 2.3 原型模式作用 3 原型模式优缺点 4 什么地方使用原型模式 5 原型模式实现 6 原型模式与构造函数 1 ...

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

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

最新文章

  1. 高性能千万级定时任务管理服务forsun使用详解
  2. 谷歌施密特:美人才签证政策让硅谷转移到中国
  3. OpenCV学习笔记(3)——Scalar数据类型理解
  4. 科大星云诗社动态20210511
  5. 安卓手机反应越来越慢怎么办_安卓手机运行慢怎么办 只需几步轻松提升安卓手机速度...
  6. oracle 处理过程,Oracle SQL语句处理过程(转载)
  7. VC6.0 导入资源崩溃
  8. yolov5模型部署:Nvidia使用TensorRT部署yolov5s模型
  9. 计算并输出1000以内的所有“完数”之和
  10. 林权抵押贷款政策出台 将实现林业资源变资本
  11. RS232 DB9引脚定义
  12. 【181012】VC++ 中国象棋人机对弈程序源代码
  13. amaze UI的使用
  14. github-上传本地代码到github仓库
  15. 平面设计中的对比设计技巧
  16. Mac 配置maven
  17. 计算机管理中不显示u盘,优盘不显示,教您优盘不显示处理方法
  18. 2019年上半年英语四、六级成绩查询方式和时间
  19. 4G边缘计算工业路由器与传统4G工业路由器的区别
  20. 漂亮的非主流图片(38p)

热门文章

  1. Vue+Vux引入国际化
  2. 中职网络安全-Web渗透
  3. 如何制作一个可视化大屏模板
  4. TortoiseSVN下载安装及配置中文语言包
  5. 普法知识(33):关于举证责任的分配
  6. 2021亚太杯C题(塞罕坝)赛后总结
  7. 利用FreeMarker实现网页到Word文档的生成
  8. Wi-Fi 2.4G 和 5G 信道列表
  9. 浮点数可以用==来比较是否相等吗?
  10. 自定义函数内可以使用全局变量吗?答案是不可以,需要关键字global