设计模式:原型模式(Prototype)
来源:互联网 发布:涂子沛 大数据 pdf 编辑:程序博客网 时间:2024/05/16 04:36
原型模式:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。
举个例子:
1 原型(实际上是implements了Cloneable接口,进而重写clone()方法)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
2 测试代码
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
输出:
- 1
- 2
- 3
克隆还分为浅克隆和深克隆,细节这里就不赘述了。在《Effective Java》中作者提出了“谨慎地覆盖clone”,文中提出了Cloneable的许多问题,建议使用拷贝构造器的方法来替换Cloneable.
优缺点
优点:
- 如果创建新的对象比较复杂时,可以利用原型模式简化对象的创建过程,同时也能够提高效率。
- 可以使用深克隆保持对象的状态。
- 原型模式提供了简化的创建结构。
缺点:
- 在实现深克隆的时候可能需要比较复杂的代码。
- 需要为每一个类配备一个克隆方法,而且这个克隆方法需要对类的功能进行通盘考虑,这对全新的类来说不是很难,但对已有的类进行改造时,不一定是件容易的事,必须修改其源代码,违背了“开闭原则”。
适用场景
1. 如果创建新对象成本较大,我们可以利用已有的对象进行复制来获得。
2. 如果系统要保存对象的状态,而对象的状态变化很小,或者对象本身占内存不大的时候,也可以使用原型模式配合备忘录模式来应用。相反,如果对象的状态变化很大,或者对象占用的内存很大,那么采用状态模式会比原型模式更好。
3. 需要避免使用分层次的工厂类来创建分层次的对象,并且类的实例对象只有一个或很少的几个组合状态,通过复制原型对象得到新实例可能比使用构造函数创建一个新实例更加方便。
Jdk中的原型模式
java.lang.Object#clone()
java.lang.Cloneable
参考资料:
1. 《23种设计模式》
2. 《Effective Java(Second Edition)》Joshua Bloch.
3. 《细数JDK里的设计模式》
0 0
- 原型(Prototype)设计模式
- 设计模式-原型设计模式(Prototype)
- 设计模式-原型设计模式(Prototype)
- 设计模式 原型Prototype
- prototype(原型设计模式)
- 设计模式--Prototype(原型)
- Prototype(原型)设计模式
- 设计模式-prototype原型
- 设计模式之原型模式(Prototype)
- 设计模式--原型模式(Prototype)
- 设计模式之原型模式(Prototype)
- 设计模式-原型模式(Prototype Pattern)
- 设计模式---原型模式(Prototype)
- 设计模式 (五)原型模式(Prototype)
- 设计模式 (五)原型模式(Prototype)
- 设计模式 (五)原型模式(Prototype)
- 设计模式prototype(原型模式)
- [设计模式]原型模式(Prototype)
- 2016-08-19-java-关于线程的死锁的案例分析:生产者消费者问题
- 【NOIP2016提高A组模拟8.19】公约数
- 第四章 4.9 sizeof运算符
- python——log日志
- linux环境下搭建一个基于tcp的客户端和服务器
- 设计模式:原型模式(Prototype)
- adapter一般格式
- Unity之路(五):时间、数学、随机
- Spring AOP学习笔记
- zz 数据挖掘, 机器学习的测试数据集 - 美国UCI数据集
- poj2376
- 正则表达式小Tips
- Unity之路(六):预设体和刚体
- Real-Time Rendering-附录A 线性代数