设计模式-原型模式

说原型模式之前我们先带着几个问题去看

什么是原型模式
什么是深复制和浅复制
深复制浅复制跟传递类型的关系
值类型和应用类型的异同
堆和栈

什么是原型模式

原型模式(Prototype Pattern)是用于创建重复的对象,同时又能保证性能。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。

这种模式是实现了一个原型接口,该接口用于创建当前对象的克隆。当直接创建对象的代价比较大时,则采用这种模式。例如,一个对象需要在一个高代价的数据库操作之后被创建。我们可以缓存该对象,在下一个请求时返回它的克隆,在需要的时候更新数据库,以此来减少数据库调用。

什么是深复制浅复制

原型模式的复制涉及到了深复制和浅复制的概念。原型的复制可以理解为实例化,比如我们new三次复制了三个对象,但是这样面临了一个问题,就是如果我们初始化的构造函数很长,实例化的次数多,那么我们的效率就很低下了。那么我们怎样解决这个问题呢?
Test test1 = new Test();
Test test2 = test1;
Test test3 = test1;

这样写其实时传引用而不是传值,这样就是相当于在test2上写着请看test1一样没有实际内容,如果我改变了一个对象会影响其他的对象,这样做不符合我的要求,然后我们就涉及到了克隆方法的深复制和浅复制问题了。

1)浅拷贝是指源对象与拷贝对象共用一份实体,仅仅是引用的变量不同(名称不同)。对其中任何一个对象的改动都会影响另外一个对象。
举个例子,一个人叫张三,是个经理,但是在单位大家叫他张经理,但是无论是张三还是张经理都是同一个人,然后一天张三升职了变总经理了,张经理变张总了,那么无论是之前的张经理还是张三现在职位都是总经理了。
这里写图片描述
这里写图片描述
2) 深复制是把要复制的对象和引用的对象都复制了一遍。每复制一个就开辟一个新的空间给他。深复制引用对象的变量指向复制过来的新对象,而不是原有的被引用的对象。
这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 9
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值