原型模式源码分析

原型模式

定义

  • 指原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象
  • 不需要知道任何细节
  • 类型:创建型

使用场景

  • 类初始化消耗较多资源
  • new产生的一个对象需要非常繁琐的过程(数据准备、访问权限等)
  • 构造函数比较复杂
  • 循环体中生产大量对象时

优点

  • 原型模式创建对象性能比new一个对象性能高
  • 简化创建过程

缺点

  • 必须配备克隆过程
  • 对克隆复杂对象或克隆出的对象进行复杂改造时,容易引入风险
  • 深拷贝、浅拷贝要运用得当

源码解析

public interface Cloneable {
}

Cloneable接口,就是原型模式的关键。在原型模式中,要特别注意区分:深克隆和浅克隆

浅克隆

public Object clone(){
    return super.clone();
}

浅克隆,不能克隆引用类型对象。和源对象持有相同引用

深克隆

public CacheKey clone() throws CloneNotSupportedException {
    CacheKey clonedCacheKey = (CacheKey) super.clone();
    clonedCacheKey.updateList = new ArrayList(updateList);
    return clonedCacheKey;
  }

深克隆,可以克隆引用类型对象。和源对象持有不同的引用

原型模式破坏单例模式

原型模式和单例模式,其实原型模式的clone()方法可以破坏单例模式(前提要单例类实现Cloneable接口)

源码剖析

可以自行去IDE那看看,那些类实现了Cloneable接口,基本的类有:
ArrayList;HashMap;MyBatis的CacheKey等等。
代码都挺容易看懂的。

你可能感兴趣的:(原型模式源码分析)