原型模式非常简单常见,通俗来说就是copy。
定义
用原型实例创建指定对象的种类,并且通过拷贝这些原型创建新的对象。
原型模式类图如下:

看到这个类图是不是很亲切?那就对了!对于Java来说,由于Object类本身实现clone方法,也意味着一般Java对象都是可拷贝的(除非你复写cone方法)。
优点
- 性能优良
原型模式是直接拷贝内存二进制流,性能比new一个对象要好得多
缺点
- 逃避构造函数的约束 这其实既是优点也是缺点。优点是灵活,缺点是过于灵活。。。用这种方法可以躲过一般单例模式的限制(因为根本不使用构造函数)。关于单例模式的破坏,对象的创建有四种:new、clone、序列化、反射。一般单例模式只考虑限制new,所以后三种通常能达到破坏单例的目的。目前最安全、最简单的单例实现方式是枚举。
原型模式的应用场景
- 初始化类或者产生一个对象需要消耗性能或特殊访问权限时
- 有多个修改者时
一些注意事项
- 构造函数不会被执行。
- 浅拷贝和深拷贝。
浅拷贝即只拷贝对象本身,对象内部的数组、引用对象不会进行拷贝。深拷贝即上述引用都拷贝。 - final变量会阻止对象的深拷贝
参考
设计模式之禅