持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第29天,点击查看活动详情
装饰者模式是在不改变原对象的基础上,通过对其进行包装拓展(添加属性或者方法)使原有对象可以满足用户的更复杂需求。装饰者模式的思路是针对不可能一成不变的需求做改动,对代码的设计更加的牢固,以应对不同的需求变动更改。
示例
比如我们对一个输入框做一些操作上的处理,需要用到这么多简单的代码,但是如果在一个表单中存在多个输入框并且各个输入框的功能大同小异,应该如何去进行拆解封装才是最佳的呢。
在以上的代码中,针对各个输入框的点击情况进行处理,通过创建装饰者,传入输入框的name和需要执行的函数,对各个输入框需要完成的需求就行封装,通过typeof去判断输入框是否存在点击函数,这一步骤主要是为了我们对输入框进行功能修改的时候避免覆盖叼原来的函数,如果存在原有函数,我们可以将原有函数oldClickFun和新增函数fn()进行同时执行。
这样每对一个输入框进行操作的时候,整部分代码看起来就比较简洁,并且不会像初始代码一样,需要对一个元素进行隐藏,再对另外一个元素进行新增的操作,我们可以对需要隐藏的函数放到装饰器中同一执行,而不是每更改一次修改一次。
通过交互功能的拓展,可以在不了解原有功能的基础上对功能拓展模式,这是对原有功能的一种增强与拓展。当然同样对原有对象进行拓展的模式还有适配器模式,所不同的是适配器进行拓展很多时候是对对象内部结构的重组,因此了解其自身结构是必需的。而装饰者对对象的拓展是一种良性拓展,不用了解其具体实现,只是在外部进行了一次封装拓展,这又是对原有功能完整性的一种保护。