「全网最细 + 实战源码案例」设计模式——原型模式

核心思想

  • 原型模式(Prototype Pattern)是一种创建型设计模式。它通过复制现有对象来创建新的对象,而不是通过实例化类。原型模式适用于创建成本较高或复杂的对象 ,或者需要避免暴露类内部复杂结构 的场景。核心思想是**"克隆"**。

结构

1. Prototype(抽象原型类)

  • 定义了一个接口,用于生命 clone 方法。
  • 该接口是所有具体原型类的父类。
  • 可以是抽象类或接口,具体视需求而定。

2. ConcretePrototype(具体原型类)

  • 实现 Prototype 接口。
  • 提供对象自身的复制功能,通过实现 clone 方法来生成自身的副本。

3. Client(客户端)

  • 调用具体原型类的 clone 方法来复制对象,而无需直接依赖具体类的构造函数。

适用场景

  1. 对象初始化成本高,需要从数据库加载或执行复杂计算。
  2. 频繁创建类似对象,如游戏中的道具、地图上的元素。
  3. 需要动态修改类的结构,如需要在运行时扩展对象类型。

优缺点

优点:

  1. 减少对象创建成本:通过复制已有对象,避免昂贵的对象初始化过程。
  2. 隐藏复杂性:调用者无需了解类的具体构造过程。
  3. 动态增加或减少类:通过克隆原型对象,可以方便地扩展新的对象。
  4. 简化实例创建:对于需要大量类似对象的场景非常高效。

缺点:

  1. 克隆包含循环引用的复杂对象可能会非常麻烦:浅拷贝无法正确处理循环引用的场景,可能导致错误或无限递归问题。

实现步骤

  1. 定义一个实现 Cloneable 接口的原型类。
  2. 在类中重写 clone() 方法,确保对象的复制逻辑。
  3. 调用原型的 clone() 方法创建新对象。

注意事项

1. 浅拷贝与深拷贝:

  • 浅拷贝:只复制对象的基本数据类型,引用类型属性仍指向原始对象。
  • 深拷贝:不仅复制基本类型,也复制引用类型的对象,创建一个完全独立的副本。

2. Cloneable 接口:

  • 在 Java 中,必须实现 Cloneable 接口并重写 clone() 方法,否则会抛出 CloneNotSupportedException

3. 不适用场景:

  • 对于高度依赖构造函数或不支持 clone() 的框架。

示例


与其他模式的关系

相关推荐
2601_9620715714 小时前
【Java报错已解决】org.springframework.beans.factory.BeanCreationException
java·开发语言
zww894911114 小时前
酒馆预约系统开发实战:从需求分析到上线全流程指南
java·eclipse
东风破_16 小时前
从跨域到 WebSocket:前端跨域方案、SSE 与双向实时通信详解
前端·后端
zww894911117 小时前
匿名树洞系统开发实战:从需求分析到部署指南
java·eclipse
行百里er17 小时前
Gateway 上别硬塞 MVC:DeferredImportSelector 看菜下锅
spring boot·后端·开源
名字还没想好☜17 小时前
Java 遍历时删元素抛 ConcurrentModificationException:fail-fast 原理与三种正确删法
后端
IT_陈寒18 小时前
React Hooks闭包陷阱差点让我加班到凌晨
前端·人工智能·后端
黑马程序员毕设18 小时前
基于Java的医院药品管理系统的优化设计与实现
java·开发语言·spring boot·小程序·架构·课程设计·毕设
木井巳18 小时前
【BFS/DFS 解决 FloodFill 算法】太平洋大西洋水流问题
java·算法·leetcode·深度优先·广度优先·宽度优先·推荐算法
码事漫谈18 小时前
本体论,彻底懂
后端