Java之设计模式(原型模式)
2022-04-25 14:28:04 9 举报
AI智能生成
Java之设计模式(原型模式)
作者其他创作
大纲/内容
创建型模式
指原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象
优点
Java 自带的原型模式基于内存二进制流的复制,在性能上比直接 new 一个对象更加优良。
可以使用深克隆方式保存对象的状态,使用原型模式将对象复制一份,并将其状态保存起来,简化了创建对象的过程,以便在需要的时候使用(例如恢复到历史某一状态),可辅助实现撤销操作
缺点
需要为每一个类都配置一个 clone 方法
clone 方法位于类的内部,当对已有类进行改造的时候,需要修改代码,违背了开闭原则。
当实现深克隆时,需要编写较为复杂的代码,而且当对象之间存在多重嵌套引用时,为了实现深克隆,每一层对象对应的类都必须支持深克隆,实现起来会比较麻烦。因此,深克隆、浅克隆需要运用得当。
结构与实现
抽象原型类:规定了具体原型对象必须实现的接口
具体原型类:实现抽象原型类的 clone() 方法,它是可被复制的对象。
访问类:使用具体原型类中的 clone() 方法来复制新的对象。
浅克隆
创建一个新对象,新对象的属性和原来对象完全相同,对于非基本类型属性,仍指向原有属性所指向的对象的内存地址。
深克隆
创建一个新对象,属性中引用的其他对象也会被克隆,不再指向原有对象地址。
ArrayList
HashSet
HashMap
引用拷贝、浅拷贝 和 深拷贝
引用拷贝
二者的引用是同一个对象,并没有创建出一个新的对象
因为是同一个对象的引用,所以两者改一个,另一个对象的值也随之改变
因为是同一个对象的引用,所以两者改一个,另一个对象的值也随之改变
浅拷贝
浅拷贝是按位拷贝对象,它会创建一个新对象,这个对象有着原始对象属性值的一份精确拷贝
如果属性是基本类型,拷贝的就是基本类型的值;
如果属性是引用类型,拷贝的就是内存地址(即复制引用但不复制引用的对象) ,因此如果其中一个对象改变了这个地址,就会影响到另一个对象。
如果属性是基本类型,拷贝的就是基本类型的值;
如果属性是引用类型,拷贝的就是内存地址(即复制引用但不复制引用的对象) ,因此如果其中一个对象改变了这个地址,就会影响到另一个对象。
深拷贝
被拷贝对象的所有变量都含有与原来的对象相同的值,除去那些引用其他对象的变量。
那些引用其他对象的变量将指向被复制过的新对象,而不再是原有的那些被引用的对象。换言之,深复制把要复制的对象所引用的对象都复制了一遍。
那些引用其他对象的变量将指向被复制过的新对象,而不再是原有的那些被引用的对象。换言之,深复制把要复制的对象所引用的对象都复制了一遍。
0 条评论
下一页