TypeScript设计模式之单例、建造者、原型(2)

这里有个问题是RequestBuilder需不需要抽象出来,个人觉得要看情况而定。
首先是保持简单,不去套UML,只是一个简单的构造功能给内部使用也没必要抽象来增加代码复杂度,但如果业务上这个Builder是封装在一个库里面并且要对外提供服务,那还是需要一个抽象来隐藏细节,消除对实现的依赖。
并且如果业务上还需要不同的RequestBuilder,比如说XmlRequestBuilder JsonRequestBuilder之类,那就更需要一个抽象了。

原型模式 Prototype 特点:不需要知道对象构建的细节,直接从对象上克隆出来。 用处:当对象的构建比较复杂时或者想得到目标对象相同内容的对象时可以考虑原型模式。 注意:深拷贝和浅拷贝。

JavaScript对这个应该是太了解了,天生就有Prototype,通过Object.create就可以根据对象原型创建一个新的对象。

class Origin{ name: string } let origin = new Origin(); origin.name = 'brook'; let cloneObj = Object.create(origin); console.log(cloneObj.name); // brook

不过还是用代码简单实现一下原型模式

interface Clonable<T>{ clone(): T; } class Origin implements Clonable<Origin>{ name: string; clone(): Origin{ let target = new Origin(); target.name = this.name; return target; } } let origin = new Origin(); origin.name = 'brook'; let cloneObj = origin.clone(); console.log(cloneObj.name); // brook

实现Clonable接口的都具有Clone功能,通过Clone功能就可以实现对象的快速复制,如果属性很多,想另外创建属性值也差不多相同的对象,原型就可以派上用场。
当然,还是要注意深拷贝和浅拷贝的问题,上面的代码只有string,所以浅拷贝没有问题,如果有对象就需要注意浅拷贝是否能满足要求。

关于TypeScript的推荐文章

使用Visual Studio Code开发TypeScript 

WebStorm下使用TypeScript 

TypeScript 基本语法 

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/75d3832abc3be623f1a4cec33b103ba0.html