• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >JavaScript > Javascript设计模式-17-装饰者模式

Javascript设计模式-17-装饰者模式

作者:mjzhang1993的博客 字体:[增加 减小] 来源:互联网 时间:2017-08-19

mjzhang1993的博客通过本文主要向大家介绍了javascript,设计模式,装饰者模式等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

简介

装饰者模式可以动态的给某个对象添加一些额外的职责,而不会影响从这个类中派生出的其他对象

优势

  • 传统的面向对象语言中,给对象添加功能常常使用继承的方式,但是继承的方式并不灵活,还会带来许多问题:一方面导致超类和子类之间存在强耦合性,当超类改变时,子类页随之改变;另一方面,继承方式中,超类的内部细节对子类式可见的,破坏了封装性

  • 装饰者模式能够在不改变对象自身的基础上,在程序运行的期间给对象动态添加职责,跟继承相比,装饰者模式是一种轻便灵活的做法,是一种 ‘即用即付’ 的方式

装饰函数的实现

    // 给 Function 构造函数添加 before 和 after 两个方法
    Function.prototype.before = function (beforeFn) {
        // 保存原函数的引用
        var _self = this;
        // 返回包含了原函数和新函数的‘代理函数’
        return function () {
            beforeFn.apply(this, arguments);

            // 执行原函数并返回原函数的执行结果
            return _self.apply(this, arguments);
        }
    }

    // 与 before 的区别是新旧函数的执行顺序
    Function.prototype.after = function (afterFn) {
        var _self = this;

        return function () {
            var ret = __self.apply( this, arguments ); 

            afterfn.apply( this, arguments ); 
            return ret;
        }
    }

    // 使用
    var ajax = function (type, url, param) {
        console.log('发送 ajax 请求 ', param);
    }

    var getToken = function () {
        return 'Token';
    }

    // 装饰
    ajax = ajax.before(function (type, url, param) {
        param.Token = getToken();
    });

    ajax('get', 'http://xxx.com', {name: 'ajax'}); // 发送 ajax 请求  {name: "ajax", Token: "Token"}

装饰者模式与代理模式

  • 代理模式的目的是,当直接访问本体不方便或者不符合需要时,这个本体提供一个替代者,本体提供了关键功能,而代理提供或拒绝访问,或者访问前做额外的事

  • 装饰者模式作用就是为对象动态加入行为

  • 代理模式通常只有一层代理-本体的引用,而装饰者模式经常会形成一条长长的装饰链

装饰者模式与外观模式

  • 外观模式,是对一系列操作的封装,并对外提供接口

  • 装饰者模式,是对某一个对象进行内容附加,提供额外的行为,扩展功能

文章列表

  1. Javascript 设计模式 - 01 - 原型模式
  2. Javascript 设计模式 - 02 - 单例模式
  3. Javascript 设计模式 - 03 - 建造者模式
  4. Javascript 设计模式 - 04 - 工厂模式
  5. Javascript 设计模式 - 05 - 外观模式
  6. Javascript 设计模式 - 06 - 代理模式
  7. Javascript 设计模式 - 07 - 观察者模式
  8. Javascript 设计模式 - 08 - 策略模式
  9. Javascript 设计模式 - 09 - 命令模式
  10. Javascript 设计模式 - 10 - 迭代器模式
  11. Javascript 设计模式 - 11 - 职责链模式
  12. Javascript 设计模式 - 12 - 适配器模式
  13. Javascript 设计模式 - 13 - 模板方法
  14. Javascript 设计模式 - 14 - 组合模式
  15. Javascript 设计模式 - 15 - 享元模式
  16. Javascript 设计模式 - 17 - 装饰者模式
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • JavaScript瀑布流布局实现代码
  • Javascript实现页面滚动时导航智能定位
  • JavaScript实现打地鼠小游戏
  • javascript编写简易计算器
  • JavaScript实现无穷滚动加载数据
  • JavaScript仿微信打飞机游戏
  • javascript 中关于array的常用方法详解
  • javascript 中的继承实例详解
  • JavaScript函数表达式详解及实例
  • JavaScript中双向数据绑定详解

相关文章

  • 2017-05-11100多个基础常用JS函数和语法集合大全
  • 2017-05-11Bootstrap进度条与AJAX后端数据传递结合使用实例详解
  • 2017-05-11微信小程序 radio单选框组件详解及实例代码
  • 2017-10-15Echarts的基础
  • 2017-05-11Node.js websocket使用socket.io库实现实时聊天室
  • 2017-05-11jquery与ajax获取特殊字符实例详解
  • 2017-05-11如何快速上手Vuex
  • 2017-05-11bootstrap datetimepicker日期插件使用方法
  • 2017-05-11JavaScript比较两个数组的内容是否相同(推荐)
  • 2017-05-11JavaScript解析JSON格式数据的方法示例

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • js实现简单的选项卡效果
    • 基于JavaScript实现图片剪切效果
    • Math.prototype.concat详解
    • jQuery元素选择器实例代码
    • 详解VueJs异步动态加载块
    • vue.js之vue-cli脚手架的搭建详解
    • 如何制作幻灯片(代码分享)
    • 微信小程序 input输入框详解及简单实例
    • jquery获取select,option所有的value和text的实例
    • 自带气泡提示的vue校验插件(vue-verify-pop)

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有