设计模式(3)--Prototype 原型模式
来源:互联网 发布:淘宝发货怎么填单号 编辑:程序博客网 时间:2024/06/05 14:14
受spring配置文件bean的属性非单例即prototype的影响,老是不自觉的认为两种模式是对立的。。。事实上,单例的对象确实和原型模式冲突,但是原型模式的重点绝不是单例模式的对立面。
原型模式的重点在于:指定一个类型作为原型,并使用Clone()方法去创建这个类型的对象实例。和工厂模式一样,也是一种创建对象的方式。在实际应用中,原型模式经常是结合工厂等模式出现,比如在factory的实现中使用clone来创造出对象。那么使用clone的理由是什么呢?
- clone属于JNI,其性能是new所不能比拟的。其直接复制内存中的二进制数据。
- clone可以直接跳过创建对象的复杂过程,比如set一系列的值或者引用对象等等。例如要复制一个map作为不能modify的对象返回,没有clone,你必须new一个map然后循环set每一个键值对,这种写法和速度都是低下的。
或者说,对象的大部分性质相同,只有特定的一些不同点。比如你复制的一个map大部分都类似,只需要修改一个值,那么clone也会是更好的选择。 - 对于运行时才能完全确定内容的对象,比如select一张表得到的结果集,你如何想创建一个完全一样的实例,你不能再去select一次吧,那么就可以使用clone了。
- 总之,如果一个类型的对象需要频繁的创建(比如action类,需要存储页面输入状态,不可能是单例的),同时又想免去创建过程的一系列繁琐的步骤,利用clone就是值得考虑的。
所以原型模式的使用和理解相当于对clone的使用和理解,这里不再展开讨论了,以要点方式概括:
- clone方法不会调用构造函数。也没有访问权限的约束。
- object实现了clone方法但是是protected,所以一般来说需要自己用public的方式重写clone方法。
- 对象中的基本类型、封装类型和String,在clone时会实现深复制。而其它的list,map等类型,只是复制了引用而已。一旦将原对象的list改变,复制对象同时会改变。这时候就需要在clone方法中,显式的对这些引用对象进行clone:obj.list = (ArrayList) this.list.clone();
0 0
- 设计模式(3)--Prototype 原型模式
- 设计模式(3)-原型(Prototype)模式
- 原型(Prototype)设计模式
- 设计模式-原型设计模式(Prototype)
- 设计模式-原型设计模式(Prototype)
- 设计模式 原型Prototype
- prototype(原型设计模式)
- 设计模式--Prototype(原型)
- Prototype(原型)设计模式
- 设计模式-prototype原型
- 设计模式(3)-原型模式(Prototype)
- 设计模式(3)-Prototype 原型模式
- 设计模式之原型模式(Prototype)
- 设计模式--原型模式(Prototype)
- 设计模式之原型模式(Prototype)
- 设计模式-原型模式(Prototype Pattern)
- 设计模式---原型模式(Prototype)
- 设计模式 (五)原型模式(Prototype)
- NSPredicate的用法
- could not write file classpath的解决方法
- VC实现 UTF8转换成GB2312
- Android中自定义shape
- 文章标题
- 设计模式(3)--Prototype 原型模式
- android:layout_weight的真实含义
- 山东农业大学/基础训练6
- 一个简单的爬虫
- c语言 setjmp和longjmp 实现协线程
- 使用IE11的F12开发人员工具进行网页前端性能测试
- Android笔记9
- 产品经理演进漫谈:千万不要以为鼻祖是乔布斯
- Swift实现数据的存储