Appearance

原型模式

coderzhouyu

什么是原型模式

原型模式比较简单,实际上就是通过一个对象来克隆出另外一个对象,这个过程就叫做克隆,而被克隆的对象就叫做原型对象,被克隆出来的对象就叫做克隆对象。

原型模式有哪些用法?

原型模式使用场景 : 原型模式的目的是降低实例对象个数 , 减少构造函数的调用次数

  • 类初始化消耗资源过多 : 如果类初始化时消耗过多的资源 , 如这个类中某个成员占用大量内存 , 为了节省开销 ;
  • 初始化繁琐耗时 : 类对象创建时经过大量的计算 , 或与本地资源 ( 数据库 , 文件 ) 频繁交互 , 每次创建消耗大量的 CPU 与 时间资源 ;
  • 构造函数复杂 : 类中定义的构造函数复杂 ;
  • 实例对象数量庞大 : 如果在内存中循环创建了很多该实例对象 , 就可以使用原型模式复用不用的对象 , 用于创建新对象 ;

原型模式的优缺点有哪些?

  • 原型模式优点 : 性能高 , 简单

    • 性能高 : 使用原型模式复用的方式创建实例对象 , 比使用构造函数重新创建对象性能要高 ; ( 针对类实例对象开销大的情况 )
    • 流程简单 : 原型模式可以简化创建的过程 , 可以直接修改现有的对象实例的值 , 达到复用的目的 ; ( 针对构造函数繁琐的情况 )
  • 原型模式缺点 : 实现复杂 , 坑多

    • 覆盖 clone 方法 ( 必须 ) : 必须重写对象的 clone 方法 , Java 中提供了 cloneable 标识该对象可以被拷贝 , 但是必须覆盖 Object 的 clone 方法才能被拷贝 ;
    • 深拷贝 与 浅拷贝 风险 : 克隆对象时进行的一些修改 , 容易出错 ; 需要灵活运用深拷贝与浅拷贝操作
    • 在多线程环境下使用原型模式时,需要注意线程安全问题。在复制对象时,确保对原型对象进行同步,以避免在复制过程中发生数据不一致的问题。
    • 在实现深拷贝时,需要注意对象之间的循环引用问题。如果对象之间存在循环引用,可能导致无限递归和堆栈溢出。在实现深拷贝时,可以使用哈希表来存储已经复制过的对象,以避免重复复制和循环引用问题。

实现原型模式

public class Prototype implements Cloneable {
    @Override
    protected Object clone() throws CloneNotSupportedException {
        return super.clone();
    }
}
Last Updated 2023/10/18 09:59:31