You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
constdata={name: "startegy",age: 0};constconfig=newMap([["name","isNotEmpty"],["age","isGreaterThan"]]);Validator.isNotEmpty=newStrategy.Checker(val=>val.length>0,val=>`The ${val} is empty`);Validator.isGreaterThan=newStrategy.Checker(number=>number>20,number=>`The number ${number} is less than 20`);assert.equal(newValidator(config).validate(data).isError(),true);
单例模式
单例模式需确保只有一个实例且可以全局访问。
实现单例模式
测试:
实践
单例模式需要满足只有一个实例且可全局访问即可,可以使用 JavaScript 的闭包来实现。接下来以弹窗为例:
将单例模式和创建弹窗代码解耦:
发布订阅模式
事件发布订阅模式可以帮助完成更松的解耦。
EventEmiiter 的简单实现
测试代码:
代理模式
代理对象和本体对象具有一致的接口,对使用者友好。代理模式的种类有很多种,在
JavaScript
中常见的是:虚拟代理和缓存代理。虚拟代理实现图片预加载
缓存代理实现乘积计算
策略模式
顾名思义,根据不同的参数(或配置)有不同的策略(函数)。
表单验证
以表单验证为例,不同的字段应有不同的验证方法,即不同的策略。
测试代码:
迭代器模式
能访问到聚合对象的顺序和元素。
ES6 的
iterator
接口The text was updated successfully, but these errors were encountered: