bacor

个人站

Coding is important, so is writing


原型模式

原型模式非常简单常见,通俗来说就是copy。

定义

用原型实例创建指定对象的种类,并且通过拷贝这些原型创建新的对象。

原型模式类图如下:

看到这个类图是不是很亲切?那就对了!对于Java来说,由于Object类本身实现clone方法,也意味着一般Java对象都是可拷贝的(除非你复写cone方法)。

优点

  • 性能优良
    原型模式是直接拷贝内存二进制流,性能比new一个对象要好得多

缺点

  • 逃避构造函数的约束 这其实既是优点也是缺点。优点是灵活,缺点是过于灵活。。。用这种方法可以躲过一般单例模式的限制(因为根本不使用构造函数)。关于单例模式的破坏,对象的创建有四种:new、clone、序列化、反射。一般单例模式只考虑限制new,所以后三种通常能达到破坏单例的目的。目前最安全、最简单的单例实现方式是枚举。

原型模式的应用场景

  1. 初始化类或者产生一个对象需要消耗性能或特殊访问权限时
  2. 有多个修改者时

一些注意事项

  1. 构造函数不会被执行。
  2. 浅拷贝和深拷贝。
    浅拷贝即只拷贝对象本身,对象内部的数组、引用对象不会进行拷贝。深拷贝即上述引用都拷贝。
  3. final变量会阻止对象的深拷贝

参考

设计模式之禅