原型模式
原型模式(Prototype Pattern):使用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。原型模式是一种对象创建型模式。 不需要知道任何创建的细节,不调用构造函数.
适用场景
类初始化消耗较多资源
new 产生的一个对象需要非常繁琐的过程(数据准备、访问权限等)
构造函数比较复杂
循环体中生产大量的对象时
优点
比直接new一个对象性能高
简化创建过程
缺点
必须配备克隆方法
对克隆复杂对象或对克隆出的对象进行复杂改造时,容易引入风险
深拷贝、浅拷贝要运用得当
Golang Demo
由于golang中引入了指针,所以很巧的是,如果在返回值时,不指明是指针引用的话,就是值拷贝,因此原型模式的应用在golang中并不能得到很好的体现。也有可能是笔者学习不到位,后期会进行补充。
下面给出github上的一种实现方式。https://github.com/senghoo/golang-design-pattern/blob/master/07_prototype/prototype.go
Java Demo
浅拷贝,clone 的时候,并不会调用构造器。浅克隆默认引用的是同一个对象,这样是会有隐患的。
深克隆,深克隆也需要对clone方法进行重写。对于引用类型一定要注意是否需要深克隆。
通过抽象类的方式实现原型,如果实际业务中能够进行合理的抽象的话,可以使用下面的方式。
补充另一个版本的Java/Scala Demo 以及源码解析
Java Demo_
Scala Demo
UML_
源码解析
Last updated
Was this helpful?