学习设计模式有什么作用?
[开发]
开发效率
利于团队协作[维护]
有利于代码的升级改版
逻辑清晰/代码严谨/利于后期维护[通用]
我们依托设计模式可以实现组件化/模块化/插件化/框架化以及一些常用类库方法的编写
插件、组件、类库、框架的区别
类库:提供一些真实项目开发中常用的方法(方法做了完善处理:兼容处理、细节优化),方便我们开发和维护[jQuery/Zepto…]
插件:把项目中某一部分进行插件封装(是具备具体业务逻辑,更加有针对性),以后再有类似的需求,直接导入插件即可,相关业务逻辑代码不需要自己在编写了[jquery.drag.js/jquery.dialog.js/jquery.validate.min.js/datepicker日历插件/echarts统计图插件/iscroll]
组件:类似于插件,但是插件一般只是把js部分封装了,组件不仅仅封装了js部分,而且把css部分也封装了,以后再使用的时候,我们直接按照文档使用说明引入css/js,搭建对应的结构,什么都不用做功能自然就有了[swiper组件/bootstrap组件…]
框架:比上面三个都要庞大,它不仅仅提供了很多常用的方法,而且也可以支持一些插件的扩展(可以把一些插件集成到框架中运行)、更重要的是提供了非常优秀的代码管理设计思想…[React/Vue/Angular/React Native]
JS中的常用设计模式
单例设计模式、构造原型设计模式、发布订阅设计模式、promise设计模式
单例设计模式
1
2
3
4
5
6
7
8
9
10
11
12
13
14//=> 单例模式:把实现当前这个模块所有的属性和方法汇总到同一个命名空间下(分组作用,避免了全局变量的污染)
let exampleRender = (function(){
//=> 实现当前模块具体业务逻辑的方法全部存放在闭包中
let fn = function(){
//=> ...
}
return {
init: function(){
//=> 入口方法:控制当前模块的具体业务逻辑顺序
fn();
}
}
})();
exampleRender.init();
真实项目中,我们如果想要实现具体的业务逻辑需求,都可以依托于当理模式构建,我们把项目划分成各大板块或者模块,把实现同一个板块的方法放在一个独立的命名空间下,方便团队写作开发。
1 | class Tool { |
有三个类A/B/C,让C继承A和B
1 | class A {} |
发布订阅设计模式:观察者模式
不同于单例和构造,发布订阅是小型设计模式,应用到某一个具体的需求中:凡是当到达某个条件之后执行N多方法,我们都可以依托于发布订阅设计模式管理规划我们的JS代码
我们经常把发布订阅设计模式嵌套到其他的设计模式中
promise设计模式
解决AJAX异步请求层级齐嵌套的问题,它也是小型设计模式,目的是为了解决层级齐嵌套问题,我们也会经常把它嵌套再其他的设计模式运行
1 | $.ajax({ |
发布订阅设计模式
俗称观察者模式
实现思路
1、我们先创建一个计划表(容器)
2、后期需要做什么事情,我们都一次把需要处理的事情增加到计划表中
3、当符合某个条件的时候,我们只需要通知计划表中的方法按照顺序依次执行即可
JQ中的发布订阅
JQ中提供了实现发布订阅设计模式的方法
1 | let $plan = $.Callbacks(); //=> 创建一个计划表 |
1 | ~function(){ |
1 | //=> Each:遍历数组中每一项的内容 |
1 | ~function(){ |