原型模式

一、概述

原型模式的定义是用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象。简单来说就是拷贝一个新对象。

拷贝通常有浅拷贝和深拷贝,那么js中浅拷贝很容易实现,所以接下来主要用该模式实现深拷贝。

例如,一个对象需要在一个高代价的数据库操作之后被创建。我们可以缓存该对象,在下一个请求时返回它的克隆,在需要的时候更新数据库,以此来减少数据库调用。

优点:

1、性能提高。

2、逃避构造函数的约束。

缺点:

1、配备克隆方法需要对类的功能进行全面考虑,这对于全新的类不是很难,但对于已有的类不一定很容易。

2、必须实现 Cloneable 接口的方法。

使用场景:

1、资源优化场景。

2、类初始化需要消化非常多的资源,这个资源包括数据、硬件资源等。

3、性能和安全要求的场景。

4、通过 new 产生一个对象需要非常繁琐的数据准备或访问权限,则可以使用原型模式。

5、一个对象多个修改者的场景。

6、一个对象需要提供给其他对象访问,而且各个调用者可能都需要修改其值时,可以考虑使用原型模式拷贝多个对象供调用者使用。

7、在实际项目中,原型模式很少单独出现,一般是和工厂方法模式一起出现,通过 clone 的方法创建一个对象,然后由工厂方法提供给调用者。

二、运用

原型模式的角色:

Prototype:抽象原型角色,抽象类或者接口,用来声明clone方法。

ConcretePrototype:具体的原型类,是客户端角色使用的对象,即被复制的对象。

Prototype 类

ConcretePrototype 类

ConcretePrototype1 和 ConcretePrototype2 就是用户使用的普通对象,原型模式中让一个普通对象拷贝一个自己,仅需要继承 Prototype 类,重写 clone 方法即可。

test:

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180417G0FL9000?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

同媒体快讯

扫码关注云+社区

领取腾讯云代金券