原型设计模式
如果你是一个美术生(很显然,你不是),你可能每天的工作就是找各种各样的物体(原型),然后把它绘画出来(新的对象)。
虽然这个例子有点粗糙,但是我想说的是,所谓的原型模式就是按需去克隆原有对象,产生一个新的对象。
要这个干嘛,我想要对象可以自己new
啊。
确实是这样的,这里的前提都是建立在创建对象的成本很高时,而去讨论的。
很抽象啊,那什么才是成本比较高呢?
如果你创建一个对象,需要进行一些繁琐的操作,比如:
- 需要经过大量的计算(消耗CPU)
- 需要大量的I/O操作(磁盘I/O也好,网络I/O也罢)
其实这个貌似也白说,本质上所有的操作都可以贴这两个标签。
不过有一点你需要注意的是,如果有一天你发现,你的某个业务中使用的对象,大部分都很相似时,而且这些对象不能用单例时,就可以考虑一下是否可以用原型。
本质上就是对象缓存嘛,想象一下,你有一个十分复杂的对象(背后的数据源十分复杂),每一次都创建一个新的(背后的数据源也是完全不相同),那么最后就是创建和销毁的成本都是巨大的。
事实上,复杂对象背后这些数据源,大部分都不会更改的,只是不同的对象需要特殊化一小部分。所以,创建出来一个以后,其余的对象直接复制,然后按照需求更改自身即可。创建的成本不敢说有质的飞跃(没测过,不知道),但是销毁的成本却大大降低了,降低了JVM垃圾回收器的压力。
如果你熟悉js的话,那么原型这玩意儿一定非常的熟悉,其实Java中的继承也是原型设计模式的一种体现嘛。
如果子类不复写父类的方法,那么就是调用父类的哇。肯定没必要去在不同的类中再去插入一些相同的方法逻辑嘛。
实现原型设计模式也非常简单,有:浅拷贝、深拷贝、序列化。
这里不展开了,这些都是耳熟能详的术语了,肯定都会写的。
这里贴一篇文章:https://blog.csdn.net/weixin_39865508/article/details/140652219
这里做个提醒,使用这个模式的时候,你要会吹,要么是简化开发,要么就是这个效率真的高,具体还是要根据场景,不要为了使用而去使用。
(不要不设计,也不要过度设计!)
2025/01/05
writeBy kaiven