美文网首页
原型模式源码分析

原型模式源码分析

作者: 别拿爱情当饭吃 | 来源:发表于2019-07-16 21:47 被阅读0次

    原型模式

    定义

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

    使用场景

    • 类初始化消耗较多资源
    • 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<Object>(updateList);
        return clonedCacheKey;
      }
    

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

    原型模式破坏单例模式

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

    源码剖析

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

    相关文章

      网友评论

          本文标题:原型模式源码分析

          本文链接:https://www.haomeiwen.com/subject/htpxlctx.html