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

简介: 原型模式(Prototype Pattern)是一种创建型设计模式,通过复制现有对象来创建新对象,适用于创建成本高或复杂的对象场景。其核心思想是“克隆”,避免直接实例化类。结构上分为抽象原型类、具体原型类和客户端。优点包括减少对象创建成本、隐藏复杂性、简化实例创建;缺点是处理循环引用的复杂对象时较为麻烦。实现步骤为定义原型类、重写`clone()`方法并调用。注意事项包括浅拷贝与深拷贝的区别及`Cloneable`接口的使用。

核心思想

  • 原型模式(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() 的框架。

示例

编辑

编辑


与其他模式的关系

目录
相关文章
|
6月前
|
设计模式 人工智能 算法
基于多设计模式的状态扭转设计:策略模式与责任链模式的实战应用
接下来,我会结合实战案例,聊聊如何用「策略模式 + 责任链模式」构建灵活可扩展的状态引擎,让抽奖系统的状态管理从「混乱战场」变成「有序流水线」。
设计模式 存储 人工智能
400 0
|
8月前
|
设计模式 C++
【实战指南】设计模式 - 工厂模式
工厂模式是一种面向对象设计模式,通过定义“工厂”来创建具体产品实例。它包含简单工厂、工厂方法和抽象工厂三种形式,分别适用于不同复杂度的场景。简单工厂便于理解但扩展性差;工厂方法符合开闭原则,适合单一类型产品创建;抽象工厂支持多类型产品创建,但不便于新增产品种类。三者各有优缺点,适用于不同设计需求。
334 66
|
9月前
|
设计模式 存储 缓存
Netty源码—9.性能优化和设计模式
本文主要介绍了Netty的两大性能优化工具、FastThreadLocal的源码和总结、Recycler的设计理念/使用/四个核心组件/初始化/对象获取/对象回收/异线程收割对象和总结,以及Netty设计模式的单例模式和策略模式。
271 53
|
10月前
|
设计模式 负载均衡 监控
并发设计模式实战系列(2):领导者/追随者模式
🌟 ​大家好,我是摘星!​ 🌟今天为大家带来的是并发设计模式实战系列,第二章领导者/追随者(Leader/Followers)模式,废话不多说直接开始~
284 0
|
10月前
|
设计模式 监控 Java
并发设计模式实战系列(1):半同步/半异步模式
🌟 ​大家好,我是摘星!​ 🌟今天为大家带来的是并发设计模式实战系列,第一章半同步/半异步(Half-Sync/Half-Async)模式,废话不多说直接开始~
328 0
|
10月前
|
设计模式 运维 监控
并发设计模式实战系列(4):线程池
需要建立持续的性能剖析(Profiling)和调优机制。通过以上十二个维度的系统化扩展,构建了一个从。设置合理队列容量/拒绝策略。动态扩容/优化任务处理速度。检查线程栈定位热点代码。调整最大用户进程数限制。CPU占用率100%
585 0
|
10月前
|
设计模式 消息中间件 监控
并发设计模式实战系列(3):工作队列
🌟 ​大家好,我是摘星!​ 🌟今天为大家带来的是并发设计模式实战系列,第三章,废话不多说直接开始~
259 0
|
10月前
|
设计模式 消息中间件 监控
并发设计模式实战系列(5):生产者/消费者
🌟 ​大家好,我是摘星!​ 🌟今天为大家带来的是并发设计模式实战系列,第五章,废话不多说直接开始~
319 1
|
10月前
|
设计模式 监控 Java
并发设计模式实战系列(6):读写锁
🌟 ​大家好,我是摘星!​ 🌟今天为大家带来的是并发设计模式实战系列,第六章,废话不多说直接开始~
168 0