zoukankan      html  css  js  c++  java
  • 设计模式-装饰者模式

    装饰者模式能够在不改变对象自身的基础上,在程序运行期间给对象动态地添加职责

    示例一:页面中有一个登录 button,点击这个 button会弹出登录浮层,与此同时要进行数据上报,
    来统计有多少用户点击了这个登录 button

    <button id="button" tag="loginBtn">点击</button>
    
    Function.prototype.after = function(afterfn) {
      var __self = this;
      return function() {
        var ret = __self.apply(this, arguments);
        afterfn.apply(this, arguments);
        return ret;
      }
    };
    
    var showLogin = function() {
      console.log('打开登录浮层');
    }
    
    var log = function() {
      console.log('上报标签为: ' + this.getAttribute('tag'));
    }
    
    showLogin = showLogin.after(log); // 打开登录浮层之后上报数据
    
    document.getElementById('button').onclick = showLogin;
    

    示例二:在使用AJAX请求数据时,经常遇到部分接口需要Token的情况,这种情况也可以用装饰者模式

    // aiax
    var ajax = function(type, url, param) {
      console.log(param); // 发送 ajax 请求的代码略
    };
    
    var getToken = function() {
      return 'Token';
    }
    
    // 动态添加token
    ajax = ajax.before(function(type, url, param) {
      param.Token = getToken();
    });
    
    ajax('get', 'http:// xxx.com/userinfo', { name: 'sven' });
    
    常用网站: SegmentFault | GitHub | 掘金社区
  • 相关阅读:
    程序向informix数据库插入text类型的中文乱码问题
    深入理解Java:注解(Annotation)基本概念
    ssm架构的理解
    队列的java实现
    栈的java实现
    LinkedList的实现原理
    ArrayList的实现
    快速排序
    数据结构之桶排序
    leetcode
  • 原文地址:https://www.cnblogs.com/yesyes/p/15375993.html
Copyright © 2011-2022 走看看