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