设计模式7之原型模式( 二 )
PrototypeTest
文章插图
测试结果:
具体原型创建成功!具体原型复制成功!obj1==obj2?false
原型模式的实现其实很简单 , 只要调用clone()方法就可以实现属性复制 。
关于原型模式的思考使用原型模式性能优良 , 在原型模式中 , 对象不直接new出来 , 通过在内存中拷贝已有对象 , 如果你在循环中需要产生大量对象 , 就可以使用原型模式 。
其实有很多地方都使用了原型模式哦 。
在Spring中 , 原型模式应用的非常广泛 , 例如 scope='prototype'、JSON.parseObject() 等都是原型模式的具体应用 。
相信你肯定用过BeanUtils.copyProperties作实体拷贝 , 其实这个拷贝也是浅拷贝 。
关于浅拷贝你需要注意的我们知道 , 浅拷贝会共用同一个地址 , 如果一个对象的属性(引用类型)值改变 , 另一个对象的值也会相应改变 。 两个对象共享了一个私有变量 , 你改我改大家都能改 , 是一种非常不安全的方式 , 在实际项目中使用还是比较少的(当然 ,这也是一种“危机”环境的一种救命方式)
我们用代码来说明一下问题:
文章插图
浅拷贝问题
我们创建一个用来拷贝的类Citation
文章插图
测试代码
文章插图
直接来看看结果:
文章插图
“
如果obj2中的Member内容变了 , obj1中的Member内容会不会变?
”
这个问题的答案是会改变 。
【设计模式7之原型模式】所以在使用clone()拷贝对象时要注意这个问题 。
推荐阅读
- 运动计数开发项目的对抗赛:飞算全自动软件工程平台碾压传统模式
- 莆田:科技与创意引领制鞋新模式
- 华为开启“暴走”模式!三个大动作同时展开,国产芯片将迎来破冰
- 曝富士康正为苹果测试折叠iPhone原型机
- 送餐机器人等创新模式助力餐饮行业复苏发展
- 可折叠iPhone原型机已在富士康工厂成功经过测试
- 青少年|封面评论 |“青少年模式”依旧漏洞百出,标准化合规框架必须落地
- 聊聊网易云音乐:“心动模式”
- Windows 10端Chromium改善防病毒软件兼容性和深色模式
- iOS端Outlook引入汽车模式:改善苹果用户开车时PME体验