装饰器模式的核心在于在不改变对象/函数的前提下,给该对象/函数添加功能,使其功能更强大,能应对更复杂的需求场景。
打个比方,就好比龙珠里的孙悟空可以变身为超级赛亚人,变成超级赛亚人的孙悟空依然具备普通状态下孙悟空的能力,不过变得更强了。
我们在前端开发中,肯定会封装接口请求方法。一般来说,我们会封装好通用的通用的请求方法,然后在业务层传入配置项(url, method 等)调用该方法。如果有些场景需要添加额外的信息,比如 Accept-Language 等参数之类的,就可以通过装饰器模式来实现。
假如我们已经事前封装好了一个前端通用的请求函数 request, 我们把配置项传入 request,它可以发送请求。
然后可以根据应用场景定义一个装饰函数 requestDecorator:
1 | const requestDecorator = (params) => { |
可以看到,requestDecorator 主要作用是为 request 的入参添加”Accept-Language”和”Team-Id”,这就是一个简单的装饰器。
最后,业务层代码可以调用 requestDecorator 来完成请求任务,例如我们要写一个获取 userInfo 的功能:
1 | const getUserInfo = (params) => { |
以上就是一个装饰器模式的应用例子。