1、为什么学习设计模式:http://www.iteye.com/news/32092   或  https://blog.csdn.net/pigpigpig4587/article/details/48630223  ( 设计模式的作用是让人们写出可复用和可维护的程序)

 (个人):设计模式,可以看做是 创建对象的 函数的一种代码风格(本质上就是通过经验积累,总结了几种比较好的这种函数结构)。不同的设计模式,应对变动的需求,处理效果是有很大差异的;如果不考虑设计模式,随意用,需求的开发都是可以实现的。

      但是需求改变,维护的时候,不同的设计模式 维护难易就会很明显。设计模式  讲的是创建对象的 类 或 函数(因为对象除了构造函数创建,也可以用函数return一个对象进行创建,如 单例模式)。

2、浅谈JS的一些设计模式 : https://www.jianshu.com/p/010071439eaa

3、Javascript设计模式 : https://www.cnblogs.com/chenxygx/p/5754101.html

4、常用的javascript设计模式  : https://www.cnblogs.com/xianyulaodi/p/5827821.html (这个比较详细) 或  https://www.cnblogs.com/imwtr/p/9451129.html

5、单例模式 :

  使用场景:

         单例模式是一种常用的模式,有一些对象我们往往只需要一个,比如全局缓存、浏览器的window对象、loading效果。在js开发中,单例模式的用途同样非常广泛。试想一下,当我们

         单击 右上角登录按钮的时候,页面中会出现一个登录框 (这个组件不能事先创建好,使用显隐控制。因为只有未登入的用户才会需要创建),而这个浮窗是唯一的,无论单击多少次登录按钮,这个浮窗只会被创建一次。因此这个登录浮窗就适合用单例模式。

var single = (function(){
var unique; function getInstance(){
    // 如果该实例存在,则直接返回,否则就对其实例化
if( unique === undefined ){
unique = new Construct();
}
return unique;
} function Construct(){
// ... 生成单例的构造函数的代码
} return {
getInstance : getInstance
}
})();

  上面是 参考链接中 构造函数单例模式的 创建。基于这种单例模式,可以变成只执行一次函数的  单例模式 。

    var single = (function(){
var unique; // 返回的函数中有指向 unique变量,所以函数执行完毕后,这个变量还是保存在内存中的。
function getInstance(){
    // 如果该实例存在,则直接返回,否则就对其实例化
if( unique === undefined ){
unique = construct();
}
return unique;
}
function construct(){
// ... 执行一次 功能的代码
console.log('uu');
return true;
}
return getInstance;
})();

  个人总结:单例模式,利用了闭包的特性。函数执行完,但是函数内某些变量没有被回收的特点。             为什么闭包函数中 某些变量不被回收的原理 参考:https://www.cnblogs.com/wfblog/p/8951886.html

6、观察者模式(发布订阅模式):

  应用场景:  

    这个模式要先说应用场景,比较好理解。

    打一个离我们比较近的一个场景,博客园里面有一个订阅的按钮(貌似有bug),比如小A,小B,小C都订阅了我的博客,当我的博客一有更新时,就会统一发布邮件给他们这三个人,就会通知这些订阅者

7、

总结:

    1、功能复杂的时候,考虑扩展性的时候,模块解耦,就要考虑使用设计模式
  2、单例,发布订阅,适配器 用的比较多。
  3、基本是造轮子的时候会使用到,平时都不太考虑这个。

 
 
 
 
 
 

最新文章

  1. C#异常处理的几个原则
  2. ThinkPad E440 加内存后导致开不了机
  3. System.Web.Mvc.Html 命名空间小计(转)
  4. jeesite 经常出现java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderL解决思路
  5. 微信JS-SDK说明文档及常见问题处理
  6. [Android学习笔记]startActivityForResult和onActivityResult的使用
  7. js闭包(转)
  8. 再起航,我的学习笔记之JavaScript设计模式06(抽象工厂模式)
  9. pojo,javabean与entitybean
  10. 变量类型-Set
  11. 安装 BizTalk Server 2016
  12. python中import问题
  13. 解决方案,org.hibernate.LazyInitializationException: could not initialize proxy - no Session
  14. HDU 3488
  15. 记录Ubuntu14.04 LTS版本中使用Docker的过程
  16. 第一章:CDib类库的建立
  17. LINUX gcc安装rpm包顺序
  18. Py修行路 python基础 (五)三元运算 字符编码 元组 集合 三级菜单优化!
  19. diamond淘宝框架使用
  20. BZOJ1047:[HAOI2007]理想的正方形

热门文章

  1. HDU 6069 Counting Divisors —— 2017 Multi-University Training 4
  2. [杂题]:B/b(二分答案)
  3. python最近邻分类器KNN算法
  4. AST7D08 心率计
  5. 动态调试某个apk的smali代码,微信举例
  6. javascript:void()的理解
  7. 如何设置Windows操作系统打印机与xlpd连接
  8. B. pSort
  9. Selenium:多表单(frame/iframe)切换(Switch模块)
  10. java反射(一)--认识反射机制