【设计模式】创建型设计模式之 原型模式

介绍

原型模式是一种创建型设计模式,主要用于创建重复的对象,而无需重新初始化它们,从而提高效率并简化对象的创建过程。此模式的核心思想是利用已存在的对象实例,通过复制(克隆)的方式来生成新的对象,而不是通过new操作符来不断创建新的实例。这种方式在处理大量相似对象的场景下特别有用,尤其是在初始化对象成本较高或者需要创建的对象结构复杂的情况下。

原型模式的关键要素:

  1. 抽象原型(Prototype):这是一个接口或抽象类,声明了克隆自身的方法。在Java中,这个方法通常被表示为clone()方法。
  2. 具体原型(Concrete Prototype):实现抽象原型的类,需要实现克隆自身的逻辑。这些类包含用于创建对象所需的所有信息。

工作原理:

  • 客户端请求创建一个新对象时,不是直接使用new操作符创建,而是向已经存在的对象(原型)请求一个克隆。
  • 原型对象使用其内部的clone()方法创建并返回一个新的对象副本。
  • 这个新对象应当与原对象保持相同的初始状态,但根据需要可以进一步修改而不影响原对象。

拷贝类型:

  • 浅拷贝(Shallow Copy):创建一个新对象,但对象中的引用类型成员变量仍然指向原来的对象,即复制对象的指针,而不是指针所指向的内容。
  • 深拷贝(Deep Copy) :除了复制对象本身外,还复制对象所包含的所有引用类型成员变量所指向的对象,使得新旧对象完全独立,互不影响。
    • 方式 1:递归复制引用对象、引用对象的引用。。。。一直到复制的对象只包含基本数据类型。
    • 方式 2:序列化后反序列化生成对象,例如序列化成 JSON 再反序列化。

应用场景:

  • 当创建新对象的成本较大时,如涉及复杂计算或大量数据库操作。
  • 需要创建的对象类型在运行时决定,客户端可以根据不同条件请求不同类型的对象克隆。
  • 需要避免共享资源的冲突,每个用户都可以得到对象的一个独立副本。

优缺点:

优点

  • 提高性能,特别是在创建对象开销大的情况下。
  • 简化对象的创建过程,使得代码易于维护和扩展。
  • 提高系统的可扩展性,容易添加新的原型类。

缺点

  • 需要为每一个类配备克隆方法,增加工作量。
  • 浅拷贝可能会引起对象状态不一致的问题,需要谨慎处理深浅拷贝的选择。
  • 过多的克隆操作可能会导致内存占用增加。

案例

更新 map 缓存数据时,直接克隆出一个 map 后再进行更新,这样不影响原本的 map 的使用。

相关推荐
学究天人9 小时前
数学公理体系大全:第五章 序数与基数理论:超限算术与集合的大小
人工智能·线性代数·算法·机器学习·数学建模·原型模式
饼干哥哥9 小时前
一夜之间,全世界的 Agent 能力提高了一个档次
设计模式·agent·代码规范
学究天人10 小时前
数学公理体系大全:第六章 选择公理的等价形式及证明
人工智能·线性代数·算法·机器学习·数学建模·概率论·原型模式
Kel10 小时前
管道、IPC、Socket:你以为的三种技术,其实是同一件事
javascript·设计模式·node.js
我登哥MVP12 小时前
进 Gang of Four 设计模式:建造者模式
java·设计模式·建造者模式
进击的前栈1 天前
鸿蒙实战:19 页面全景汇总与 7 大共享设计模式回顾
华为·设计模式·harmonyos
刀法如飞1 天前
Spring Boot 4.1 + JDK 25 DDD开源脚手架,面向 AI 编程
设计模式·架构·ai编程
折哥的程序人生 · 物流技术专研1 天前
第8篇:模板方法模式的优缺点与面试高频考点
java·设计模式·面试·模板方法模式·行为型模式·优缺点·扩充系列
学究天人1 天前
数学公理体系大全:Comprehensive Collection of Mathematical Axiom Systems(补充卷9)
人工智能·线性代数·算法·数学建模·动态规划·原型模式·抽象代数
workflower1 天前
人形机器人全身运动控制能力大幅提升
人工智能·深度学习·机器学习·设计模式·机器人·自动化