• 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);
      };
     
     
      我们在编写业务代码的时候,往往不需要去预先猜测是否需要使用代理模式。 当真正发现不方便直接访问某个对象的时候, 再编写代理也不迟。

     

  • 相关阅读:
    反转链表
    fatal error LNK1104: 无法打开文件“lua51.lib”
    《cocos2d-x游戏开发之旅》问题2016-10-7
    c++中sizeof的用法
    cocos2d-x-3.0beta2创建项目遇到“UnicodeDecodeError: 'ascii' codec can't decode byte 0xd7 in position 9: ordinal not in range(128)”的问题
    C++中的explicit关键字的用法
    c++中双冒号的作用
    构造函数与析构函数
    61. Binary Tree Inorder Traversal
    60-Lowest Common Ancestor of a Binary Search Tree
  • 原文地址:https://www.cnblogs.com/rain318/p/6659241.html
Copyright © 2020-2023  润新知