理解设计模式(五)——原型模式
原型模式
理解设计模式(一)——简单工厂 理解设计模式(二)——工厂方法 理解设计模式(四)——建造者提出问题
当我们需要创建大量相似
复杂对象的时候,如果直接采用new的方法,就需要给这些对象全都设置一定的属性。有较多的重复冗余代码。并且,创建对象也十分消耗资源。
如下所示:
// new 创建 |
如何解决
既然这些对象有很多相似的地方,那么我们是不是可以只创建一个对象,其他对象都由这个对象复制得来呢?这样我们就不用设置一大堆属性,同时复制也比新建对象消耗的资源要少的多。
因此,我们只创建一个原型对象
,其他对象都通过copy这个原型对象创建。如下所示:
// 原型对象复制创建 |
具体实现
原型模式最重要的地方就是,能够提供一个copy方法,返回一个复制出来的新对象。而复制由两种方式,一种是深克隆,另一种是浅克隆。
深克隆
即对于数组、对象这样的属性,不是简单的将地址复制,而是将对应的每一项一一复制。原型对象发生改变时,不会影响到新克隆出来的对象。
let newObj = JSON.parse(JSON.stringify(oldObj)); |
浅克隆
对于数组、对象这样的属性,只是简单的复制地址。原型对象发生改变时,新克隆出来的对象也会跟着一起发生改变。
总结
原型模式主要用于需要创建大量相似对象时。