设计模式-原型模式(Prototype)
【摘要】 原型模式(Prototype)
JS原型,克隆,对象hashcode不同,但内容相同
例子:Prototype,Cloneable接口,clone()方法,native[Native Method(原生方法)]
浅克隆
视频原型
public class Video implements Cloneable{ private String name; priv...
原型模式(Prototype)
JS原型,克隆,对象hashcode不同,但内容相同
例子:Prototype,Cloneable接口,clone()方法,native[Native Method(原生方法)]
浅克隆
视频原型
public class Video implements Cloneable{ private String name; private Date createTime; @Override protected Object clone() throws CloneNotSupportedException{ return super.clone(); }// 接口方法 public Video(){}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
原型对象
Video v1 = new Video();
- 1
复制原型的新对象
Video v2 = v1.clone();
- 1
比较
v1.equals(v2); // 一样
v1.hashcode == v2.hashcode; // 不一样
- 1
- 2
问题:当复制之后,改变原型的数据,复制的新对象数据也会改变,表示这两个对象指向同一个对象的内存地址。
浅克隆:创建一个新对象,新对象的属性和原来对象完全相同,对于非基本类型属性,仍指向原有属性所指向的对象的内存地址。
深克隆
深克隆:创建一个新对象,属性中引用的其他对象也会被克隆,不再指向原有对象地址。
将浅拷贝中的cloneable接口方法重新实现。
@Override protected Object clone() throws CloneNotSupportedException{ Object obj = super.clone(); // v和obj都是引用,都指向堆中的同一个对象,基于类的访问权限。 Video v = (Video)obj; // 将原型对象的属性也克隆 v.createTime = (Date)this.createTime.clone(); // 属性是对象对象还继续引用其他的对象 return obj; }// 接口方法
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
应用
Spring Bean:单例模式,原型模式
原型模式+工厂模式:将new替代为原型模型,每次直接复制为一个新对象。
- 对象之间相同或相似,即只是个别的几个属性不同的时候。
- 创建对象成本较大,例如初始化时间长,占用CPU太多,或者占用网络资源太多等,需要优化资源。
- 创建一个对象需要繁琐的数据准备或访问权限等,需要提高性能或者提高安全性。
- 系统中大量使用该类对象,且各个调用者都需要给它的属性重新赋值。
- 在 Spring 中,原型模式应用的非常广泛,例如 scope=‘prototype’、JSON.parseObject() 等都是原型模式的具体应用。
文章来源: blog.csdn.net,作者:αβγθ,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/weixin_38022166/article/details/116496186
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)