今天学习了JavaScript的代理模式,简单来说就是在目标函数之上多了一个经理人函数。你不能直接调取目标函数,应该先调取经理人函数,然后经过判断和前置处理后,再通过经理人函数调取目标函数。
如果你仔细阅读上面的解释,就能发现其实经理人函数代码是可以直接写在目标函数中的,并且在最终实现的功能也没有什么差别。但这么做的话就违背了面向对象设计中的一个原则--单一职责原则
单一职责原则:就一个类而言,应该仅有一个引起它变化的原因。如果一个对象承担了多项职责,就意味着这个对象将变得巨大,引起它变化的原因可能会有多个。
一个函数如果包含太多的功能的,那后期维护将是一个灾难直到变成无法维护为止。所以有些懒还是不要偷为好,要不然就是在给自己找麻烦。
此外,代理模式在JavaScript中另一个重要的应用场景是“缓存代理”,既为一些开销大的运算结果提供暂时的存储,在下次运算时,如果传递进来的参数跟之前一致,则可以直接返回前面存储的运算结果。在需要重复计算结果的场景中,该模式的使用效率将是最高的。
最后,不需要一开始就编写代理函数。只有存在保护或限制目标函数访问需求的时候,在编写即可。
网友评论