原型模式(Prototype Pattern)
一、概念
我们知道通过new关键字创建的对象是非常繁琐的(类加载判断,内存分配,初始化等),当直接创建对象的代价比较大时,我们可以采用原型模式(Prototype Pattern)。通过克隆已存在的对象,减少重新创建对象的时间开销
原型模式也称为"克隆模式"
, 即某个对象为原型克隆出来一个一模一样的对象,该对象的属性和原型对象一模一样。而且对于原型对象没有任何影响。原型模式的克隆方式有2种:浅克隆和深度克隆
二、参与者
- 抽象原型角色(Abstract Prototype):这是一个抽象角色,此抽象角色规定了
所有的具体原型类所需的接口
。 - 具体原型角色(Concrete Prototype):即被复制的对象,此角色需要
实现抽象的原型角色所要求的接口
。 - 客户角色(Client):使用原型对象的客户程序。让一个原型克隆自生从而创建一个新的对象
三、代码例子
生成 BMW320 和 BenZ520
再拷贝生成 新的 BMW320 和 BenZ520
抽象原型角色(Abstract Prototype):Prototype
具体原型角色(Concrete Prototype):PrototypeBMW320 和 PrototypeBenZ520
四、UML图
五、浅克隆和深克隆
- 浅克隆:将一个对象复制后,基本数据类型的变量都会重新创建,而引用类型,指向的还是原对象所指向的。
- 深克隆:将一个对象复制后,不论是基本数据类型还有引用类型,都是重新创建的。简单来说,就是深克隆进行了完全彻底的复制,而浅克隆不彻底。
- 无论是深克隆还是、浅克隆在没有经过处理时,都会破坏单例模式,重新生成一个新的实例
六、原型模式适用场景
- 在需要一个类的
大量对象
的时候,使用原型模式是最佳选择,因为原型模式是在内存中对这个对象进行拷贝
,要比直接new这个对象性能要好很多。 - 如果一个对象的初始化需要很多
其他对象的数据准备或其他资源的繁琐计算
,那么可以使用原型模式,这样创建新的对象的时候,可以避免其他对象的数据准备和计算,直接得到当前对象的副本
。 - 当需要
保留一个复杂对象的绝大部分信息,少量字段进行个性化设置的时候
,也可以使用原型模式拷贝出现有对象的副本后再进行加工处理。
七、优缺点
(一)优点
- 减少了重新创建实例、反复的相同赋值操作的性能开销;
- 原型模式是在内存二进制流的拷贝, 要比直接new一个对象性能好很多, 特别是要在一个循环体内产生大量的对象时
(二)缺点
- 克隆
包含循环引用的复杂对象
会非常麻烦,需要编写较为复杂的代码
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了