Java设计模式,原型模式(prototype)
    Monday, July 17, 2017
    8:26 AM
    一张图搞定Java设计模式,原型模式(prototype)
    一张图学Java 2017-06-29 14:26
    一张图搞定Java设计模式,原型模式(prototype)
    设计模式思维导图
    原型模式(prototype)

    • 通过new产生一个对象需要非常繁琐的数据准备货访问权限,则可以使用原型模式。
    • 原型模式的本质是Java中的克隆技术,以某个对象为原型,复制出新的对象。
    • 通过原型模式创建的克隆对象属性值完全和原型对象相同,并且克隆出的信对象不会改变影响原型对象。

    原型模式的实现

    1. Cloneable接口和clone方法。
    2. 序列化和反序列化实现clone。
      应用场景
    • javascript语言中,继承用到了该模式。
    • 原型模式一般和工厂方法模式一起出现,通过clone的方法创建一个工厂,然后由工厂方法提供给调用者。
    • Spring 中的bean的创建实际就是两种:单例模式和原型模式。

    深克隆和浅克隆
    Object 的clone()方法实现的是浅克隆,要实现深克隆需要重写clone()方法,在该方法中对属性中的引用对象也进行克隆。
    一张图搞定Java设计模式,原型模式(prototype)
    浅克隆和深克隆
    一张图搞定Java设计模式,原型模式(prototype)
    测试:
    一张图搞定Java设计模式,原型模式(prototype)
    执行结果:
    com.hh.prototype.Sheep2a139a55
    com.hh.prototype.Sheep15db9742
    Sun Mar 21 08:20:34 CST 26579
    Sun Mar 21 08:20:34 CST 26579
    结果说明:
    通过直接调用Object的clone()方法,创建了2个不同的对象,但是修改其中一个对象的属性的时候,另一个对象的属性也发生了改变。
    一张图搞定Java设计模式,原型模式(prototype)
    执行结果:
    com.hh.prototype.Sheep2a139a55
    com.hh.prototype.Sheep15db9742
    Sun Mar 21 08:20:34 CST 26579
    Thu Jan 01 08:20:34 CST 1970 //s2的date没有发生改变
    原型模式构建对象和 new 对象效率比较
    采用原型模式创建对象200次耗时:0
    采用new创建对象200次耗时:2057
    所以,通过原型模式创建对象,可以大大提高创建的效率,直接克隆,避免了重新执行构造过程。原型模式和工厂模式搭配起来,是常用的使用方式。

    收藏
    举报
    已使用 Microsoft OneNote 2016 创建。