原型模式

   原型模式(Prototype Pattern):使用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。原型模式是一种对象创建型模式。 不需要知道任何创建的细节,不调用构造函数.

适用场景

  • 类初始化消耗较多资源

  • new 产生的一个对象需要非常繁琐的过程(数据准备、访问权限等)

  • 构造函数比较复杂

  • 循环体中生产大量的对象时

优点

  • 比直接new一个对象性能高

  • 简化创建过程

缺点

  • 必须配备克隆方法

  • 对克隆复杂对象或对克隆出的对象进行复杂改造时,容易引入风险

  • 深拷贝、浅拷贝要运用得当

Golang Demo

由于golang中引入了指针,所以很巧的是,如果在返回值时,不指明是指针引用的话,就是值拷贝,因此原型模式的应用在golang中并不能得到很好的体现。也有可能是笔者学习不到位,后期会进行补充。

下面给出github上的一种实现方式。https://github.com/senghoo/golang-design-pattern/blob/master/07_prototype/prototype.goarrow-up-right

Java Demo

浅拷贝,clone 的时候,并不会调用构造器。浅克隆默认引用的是同一个对象,这样是会有隐患的。

深克隆,深克隆也需要对clone方法进行重写。对于引用类型一定要注意是否需要深克隆。

通过抽象类的方式实现原型,如果实际业务中能够进行合理的抽象的话,可以使用下面的方式。

补充另一个版本的Java/Scala Demo 以及源码解析

Java Demo_

Scala Demo

UML_

源码解析

Last updated

Was this helpful?