专栏首页java技术学习之道一张图搞定Java原型模式

一张图搞定Java原型模式

作者:秦始皇 来源:baijiahao.baidu.com

原型模式(prototype)

通过new产生一个对象需要非常繁琐的数据准备货访问权限,则可以使用原型模式。

原型模式的本质是Java中的克隆技术,以某个对象为原型,复制出新的对象。

通过原型模式创建的克隆对象属性值完全和原型对象相同,并且克隆出的信对象不会改变影响原型对象。

原型模式的实现

  • Cloneable接口和clone方法。
  • 序列化和反序列化实现clone。

应用场景

java语言中,继承用到了该模式。

原型模式一般和工厂方法模式一起出现,通过clone的方法创建一个工厂,然后由工厂方法提供给调用者。

Spring 中的bean的创建实际就是两种:单例模式和原型模式。

深克隆和浅克隆

Object 的clone()方法实现的是浅克隆,要实现深克隆需要重写clone()方法,在该方法中对属性中的引用对象也进行克隆。

浅克隆和深克隆

测试:

执行结果:

com.hh.prototype.Sheep@2a139a55

com.hh.prototype.Sheep@15db9742

Sun Mar 21 08:20:34 CST 26579

结果说明:

通过直接调用Object的clone()方法,创建了2个不同的对象,但是修改其中一个对象的属性的时候,另一个对象的属性也发生了改变。

Thu Jan 01 08:20:34 CST 1970 //s2的date没有发生改变

原型模式构建对象和 new 对象效率比较

采用原型模式创建对象200次耗时:0

采用new创建对象200次耗时:2057

所以,通过原型模式创建对象,可以大大提高创建的效率,直接克隆,避免了重新执行构造过程。原型模式和工厂模式搭配起来,是常用的使用方式。

另外,最近新建了一个微信交流学习群,想要进入的小伙伴可以在后台加一下。

本文分享自微信公众号 - java技术学习之道(javajsxxzd)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-06-21

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • JVM初探 -JVM内存模型

    Tanyboye
  • java设计模式之装饰者模式

    Tanyboye
  • 资深大牛的吐血建议,你想知道如何学习,怎样进入阿里吗?

    Tanyboye
  • 原型模式 prototype 创建型 设计模式(七)

    用原型实例指定需要创建的对象的类型,然后使用复制这个原型对象的方法创建出更多同类型的对象

    noteless
  • 设计模式| 结构型模式

    其他同系列的文章还有: 面向对象编程中的六大原则 设计模式| 创建型模式 设计模式| 结构型模式 设计模式| 行为型模式 (上) 设计模式| 行为型模...

    進无尽
  • 通俗易懂设计模式解析——原型模式

      前面几章我们介绍了创建型设计模式的部分内容,今天我要说的是创建型设计模式中最后一个——原型模式,原型模式是创建型模式中的一种较为特殊的模式,有个最大的特点是...

    小世界的野孩子
  • Java基础系列(二十六):clone

    要想了解克隆的含义,我们首先来回想一下为一个包含对象引用的变量建立副本时会发生什么。原变量和副本都是同一个对象的引用。这说明,任何一个变量改变都会影响另一个变量...

    Vi的技术博客
  • 第24次文章:结构性模式(续)

    本周把结构性模式的剩余几种模式学完了,并且开始接触行为型模式。为便于对文章的分类,本周的文章就只把结构性模式全部扫尾处理。行为型模式放在下周的文章中一起介绍吧!

    鹏-程-万-里
  • isinstance/type/issubclass的用法,反射(hasattr,getattr,setattr,delattr)

    会显示的对象的类,也会去找对象的父类,填写参数是对象,类isinstance(对象,类)如果对象属于后面的类会报Ture,反之False

    小小咸鱼YwY
  • 装饰者模式

     装饰器模式 动态地给一个对象添加一些额外的职责,装饰器模式就是基于对象组合的方式,可以很灵活的给对象添加所需要的功能。装饰器模式的本质就是动态组合。 装饰器...

    xiangzhihong

扫码关注云+社区

领取腾讯云代金券