且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

JavaScript面试系列:JavaScript设计模式之桥接模式和懒加载

更新时间:2022-09-04 19:25:56

JavaScript面试系列:JavaScript设计模式之桥接模式和懒加载JavaScript面试系列:JavaScript设计模式之桥接模式和懒加载JavaScript面试系列:JavaScript设计模式之桥接模式和懒加载JavaScript面试系列:JavaScript设计模式之桥接模式和懒加载JavaScript面试系列:JavaScript设计模式之桥接模式和懒加载JavaScript面试系列:JavaScript设计模式之桥接模式和懒加载JavaScript面试系列:JavaScript设计模式之桥接模式和懒加载JavaScript面试系列:JavaScript设计模式之桥接模式和懒加载

借助JavaScript的闭包特性,我们在第二行创建的***变量(Free variable)只在闭包内部可见,外部消费者感知不到这个变量,因此成为存储mask div的***选择。看起来这个版本已经很完美了?不,它仍然有可以优化的空间,即题目提到的桥接模式。


版本4的缺点

从单一职责原理(Single Responsibility)来衡量版本4,createMask函数里实际包含了两种不同类型的逻辑:


1. 创建mask div


2. 使该mask div “单例化”


我们下面使用桥接模式将这两种逻辑分开,来实现最终版本。


使用桥接模式的实现版本5

这个实现包含了三个JavaScript函数。首先看singleton函数。


函数singleton的输入参数是另一个JavaScript函数(我称其为原始函数),输出是一个包装后的函数,其内部使用闭包,将原始函数第一次执行的结果保存在闭包内,当包装后的函数第二次执行时,直接返回闭包内保存的第一次执行结果。我们可以把singleton函数当成一个构造器,传入任意一个具有返回值的JavaScript函数,负责生产出具有“单例化”特性的新函数。

JavaScript面试系列:JavaScript设计模式之桥接模式和懒加载JavaScript面试系列:JavaScript设计模式之桥接模式和懒加载