
课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
软件编程开发设计模式是大多数Java程序员都需要熟练掌握的一个编程知识点,而本文我们就通过案例分析来简单了解一下,原型设计模式概念与实现方法分享。
1、描述
用原型实例指定创建对象的种类,并且通过拷贝这些原型对象的属性来创建新的对象。通俗点的意思就是一个对象无需知道任何创建细节就可以创建出另外一个可定制的对象。可以简单看作为复制、粘贴操作。
原型模式的克隆分为浅克隆和深克隆。
浅克隆
克隆对象的属性和原对象完全相同,基本类型的属性属于值传递,改变一个对象的值,另一个不会受影响。对于引用数据类型的属性,仍指向原有属性所指向的对象的内存地址。引用类型是传递引用,指向同一片内存空间,改变一个对象的引用类型的值,另一个对象也会随之改变。但是这里需要注意String类型却是一个特殊,String虽然属于引用类型,但是String类是不可改变的,它是一个常量,一个对象调用clone方法,克隆出一个新对象,这时候两个对象的同一个String类型的属性是指向同一片内存空间的,但是如果改变了其中一个,会产生一片新的内存空间,此时该对象的这个属性的引用将指向这片新的内存空间,此时两个对象的String类型的属性指向的就是不同的2片内存空间,改变一个不会影响到另一个,可以当做基本类型来使用。
深克隆
克隆对象的所有属性都会被克隆,不再指向原有对象地址。
2、适用性
对象之间相同或相似,即只是个别的⼏个属性不同的时候。
创建对象成本较⼤,例如初始化时间⻓,占⽤CPU太多,或者占⽤⽹络资源太多等,需要优化资源。
创建⼀个对象需要繁琐的数据准备或访问权限等,需要提⾼性能或者提⾼安全性。
系统中⼤量使⽤该类对象,且各个调⽤者都需要给它的属性重新赋值。
该设计模式使用场景很广泛,日常开发中难免有操作某个对象时又不想影响原有对象的情况,具体还需要看业务需求使用浅克隆或者是深克隆。
3、实现逻辑
抽象原型类:规定了具体原型对象必须实现的的clone()方法。
具体原型类:实现抽象原型类的clone()方法,它是可被复制的对象。
访问类:使用具体原型类中的clone()方法来复制新的对象。
Java中通过Object类中提供的clone()方法和Cloneable接口来实现浅克隆,clone()方法由native关键字修饰,通过本地方法拷贝地址值(基于内存二进制流的复制)来实现,不但效率高还免去我们手动实现的烦恼。Cloneable接口充当抽象原型类,而我们实现了Cloneable接口的子实现类就是具体的原型类。
需要注意由于Object本身没有实现Cloneable接口,所以不重写clone方法并且进行调用的话会发生CloneNotSupportedException异常。
【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。更多内容请加danei456学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。