javascript设计模式阅读后的感悟与总结

  • 单例模式

  用于创建唯一的一个对象。

  核心在于一个判断

  var index
  if(index){
  return index;
  }
  init();
  这样只会在第一次的时候初始化创建对象,以后都不会再创建对象。
  还有闭包内的变量不会销毁,例如index可以始终存在。
  js的实现:
  
 1   var getSingle = function (fn) {
 2     var result;
 3     return function () {
 4       return result || (result = fn.apply(this, arguments));
 5     };
 6   };
 7   //创建登陆div
 8   var createSingletonLoginLayer = getSingle(function () {
 9     var div = document.createElement('div');
10     div.innerHTML = '我是悬浮窗';
11     div.style.display = 'none';
12     document.body.appendChild(div);
13     return div;
14   });
15 
16   document.getElementById('loginBtn').onclick = function () {
17     var loginLayer = createSingletonLoginLayer();
18     loginLayer.style.display = 'block';
19   };
20   //创建iframe
21   var createSingleIframe = getSingle(function () {
22     var iframe = document.createElement('iframe');
23     document.body.appendChild(iframe);
24     return iframe;
25   });
26 
27   document.getElementById('loginBtn2').onclick = function () {
28     var loginLayer = createSingleIframe();
29     loginLayer.src = 'http://baidu.com';
30   };

 

  • 策略模式

  个人感觉这个模式挺啰嗦的,挺短的几行代码用完这个模式就变得貌似又臭又长,所以可用在验证、以及可以复用的组件等地方。 不能复用真的感觉写这么长一串不值。

  个人感觉这个模式核心在于把条件放在对象中代替用if来代替

  策略模式的目的是将算法的使用与算法的实现分离开来。

 

  • 代理模式
 
  类似明星有经纪人。
 
  代理可以帮助接收者过滤掉一些条件。
 
  引入代理、多创建一个对象,为了符合对象的单一职责原则。以后需求变更可以不更改原对象情况下将代理去掉。
 
  代理和本体需要显式地实现同一个接口(同样的函数名)
 
  分页可以使用 缓存代理 同一页的数据只从后台请求一次,不用每次都从后台请求。
  var cache = {};
  return function(){
  var args = Array.prototype.join.call(arguments,',');
  if(args in cache){
  return cache[args];
  }
  return cache[args] = mult.apply(this,arguments);
  };
 
 
  我们在编写业务代码的时候,往往不需要去预先猜测是否需要使用代理模式。 当真正发现不方便直接访问某个对象的时候, 再编写代理也不迟。

 

posted @ 2017-04-02 16:21  又小雨  阅读(357)  评论(0编辑  收藏  举报