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

打印 上一主题 下一主题

主题 835|帖子 835|积分 2505


核心思想


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

编辑
结构

1. Prototype(抽象原型类)


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


  • 实现 Prototype 接口。
  • 提供对象自身的复制功能,通过实现 clone 方法来生成自身的副本。
3. Client(客户端)


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


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

优点:


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


  • 克隆包含循环引用的复杂对象可能会非常贫苦:浅拷贝无法正确处理循环引用的场景,可能导致错误或无穷递归题目。
实现步骤


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

1. 浅拷贝与深拷贝:


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


  • 在 Java 中,必须实现 Cloneable 接口并重写 clone() 方法,否则会抛出 CloneNotSupportedException。
3. 不适用场景:


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


编辑

编辑
与其他模式的关系



免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

前进之路

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表