您的位置 首页 java

JAVA设计模式之原型模式(Prototype)

原型模式( Prototype

用原型实例指定创建对象的类型,并通过 copy 这个原型来创建新的对象

读完本文需要花费五分钟

上次我们闲聊了 观察者模式 (observer pattern),大家还记得怎么不费力气的观察妹子吗?观察者的技能属于一个被动技能,今天我们就上一个主动技能,这个技能主要用来“偷懒”的。

来来,让我们热烈鼓掌欢迎,偷懒大将

原型模式(Prototype Pattern)

创建型大将,技能:对象复制

复制,拷贝大法,这也能算模式?这个问题我思考了很久,终于明白了pattern不是要怎么高端,怎么复杂,其实更注重的是思想,以及在大量应用场景下提炼出来的通用方法给大家省心省力。

原型模式,其实就就解决了一个问题,在new一个对象时,通常要传入很多构造参数,说不定这些构造参数本事也是对象,那你在new一个对象时花的功夫可不少,性能层面也是消耗大大地。

而使用原型模式,就不用那么费力了,直接调用对象的clone()方法,不用关心任何构造参数,呼的一下,立马复制了一个和当前一摸一样的对象。一个相对官方的定义就是: 用一个已经创建的实例作为原型,通过复制该原型对象来创建一个和原型相同或相似的新对象。

实际上,创建对象包含的申请内存、给成员变量赋值这一过程,本身并不会花费太多时间,或者说对于大部分业务系统来说,这点时间完全是可以忽略的。应用一个复杂的模式,只得到一点点的性能提升,这就是所谓的过度设计,得不偿失。但是,如果对象中的数据需要经过复杂的计算才能得到(比如排序、计算哈希值),或者需要从 RPC 、网络、数据库、文件系统等非常慢速的 IO 中读取,这种情况下,我们就可以利用原型模式,从其他已有对象中直接拷贝得到,而不用每次在创建新对象的时候,都重复执行这些耗时的操作。

那原型模式一般在何时使用?

很简单,当你遇到以下场景时,可以考虑使用

  • 对象之间相同或相似,即只是个别的几个属性不同的时候。
  • 创建对象成本较大,例如初始化时间长,占用 CPU 太多,或者占用网络资源太多等,需要优化资源。
  • 创建一个对象需要繁琐的数据准备或访问权限等,需要提高性能或者提高安全性。
  • 系统中大量使用该类对象,且各个调用者都需要给它的属性重新赋值

好,至此拷贝大法,哦,不,原型模式基本讲完了,接下来,要讲的可是原型模式的高级干货了,简称高干。

啥是高干,就是你知道了后,就能比别人显的更高级,更牛逼,心动不?你身边有个高干,你是不是得另眼相看,巴结巴结。。。

当别人只知道复制,你还能说出个深拷贝,浅拷贝,那么你一定就是那个高干了。

话不多说,用说的不如用画的,一画解万难。。。请待下回分解

文章来源:智云一二三科技

文章标题:JAVA设计模式之原型模式(Prototype)

文章地址:https://www.zhihuclub.com/175605.shtml

关于作者: 智云科技

热门文章

网站地图