首页
Web开发
Windows程序
编程语言
数据库
移动开发
系统相关
微信
其他好文
会员
首页
>
其他好文
> 详细
原型模式
时间:
2016-01-26 10:35:15
阅读:
142
评论:
0
收藏:
0
[点我收藏+]
标签:
原型模式(Prototype Pattern):使用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。原型模式是一种对象创建型模式。
原型模式,就是将一个原型对象传递给要发动创建行为的对象,要发动创建行为的对象调用原型对象的拷贝方法来实现对象的创建。它属于创建型模式,特殊的是原型类本身就是工厂,克隆方法就是工厂方法。在Java中,Object类提供了clone方法,来实现对象的克隆。自定义类可以重新实现该方法。需要注意的是,如果一个类需要被克隆,那么它需要实现Cloneable接口(一个空接口,只做标记),否则调用clone方法将抛出异常。一般情况下,clone对象和源对象满足下列条件:
clone对象和源对象是不同对象,即A!=A1。他们在内存中,占用不同的地址。
具有相同的类型,即A.class == A1.class
如果equals方法定义正确,A.equals(A1)
这里存在一个问题,如果A的类型成员中,包含引用类型,那么clone得到的A1中的相应成员将会和源对象A中的成员指向同一个对象。问题引出了浅clone和深clone。
浅clone和深clone都回得到一个新对象
对于值类型的成员两种clone的效果相同
对于引用类型的成员,浅clone得到的是同一个地址的引用,深clone得到的是一个新对象地址的引用
深clone可以通过序列化实现。对一个对象序列化,原有对象不变,序列化的结果相对于对原对象的一个描述。反序列化时,将得到一个“全新”的对象。
在实际使用中,当有多个原型对象时,可以设计一个原型管理器,来管理原型对象。它相当于一个容器,存放一些类的“样本”,当外部需要一个样本相同的新对象时,通过请求原型管理器,原型管理器来调用相应对象的clone来完成新对象的创建。
优点:
当创建操作比较复杂时,可以简化过程,提高效率。
省去了工厂类,不需要复杂的分等级的工厂,简化设计。
可以保存状态,实现一些功能,例如撤销。
缺点:
需要在类内部实现clone方法,修改时违反开闭原则
深克隆需要复杂的编码,嵌套对象时,每一层都要实现,比较复杂。
适用场景:
创建对象成本较大时,可以通过clone得到类似对象,然后稍作修改。
如果需要保存对象状态,可以配合备忘录模式实现
需要避免负责的分层次的工厂类时,并且对象只有一个或较少的几个状态时,通过clone比通过构造更方便。
原型模式
标签:
原文地址:http://www.cnblogs.com/endlu/p/5159350.html
踩
(
0
)
赞
(
0
)
举报
评论
一句话评论(
0
)
登录后才能评论!
分享档案
更多>
2021年07月29日 (22)
2021年07月28日 (40)
2021年07月27日 (32)
2021年07月26日 (79)
2021年07月23日 (29)
2021年07月22日 (30)
2021年07月21日 (42)
2021年07月20日 (16)
2021年07月19日 (90)
2021年07月16日 (35)
周排行
更多
分布式事务
2021-07-29
OpenStack云平台命令行登录账户
2021-07-29
getLastRowNum()与getLastCellNum()/getPhysicalNumberOfRows()与getPhysicalNumberOfCells()
2021-07-29
【K8s概念】CSI 卷克隆
2021-07-29
vue3.0使用ant-design-vue进行按需加载原来这么简单
2021-07-29
stack栈
2021-07-29
抽奖动画 - 大转盘抽奖
2021-07-29
PPT写作技巧
2021-07-29
003-核心技术-IO模型-NIO-基于NIO群聊示例
2021-07-29
Bootstrap组件2
2021-07-29
友情链接
兰亭集智
国之画
百度统计
站长统计
阿里云
chrome插件
新版天听网
关于我们
-
联系我们
-
留言反馈
© 2014
mamicode.com
版权所有 联系我们:gaon5@hotmail.com
迷上了代码!