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

    给对象动态增加职责的方式称为装饰者模式。装饰者模式能够在不改变对象自身的基础上,在程序运行期间给对象动态地添职责。相比于继承方式,装饰者模式更轻便、更灵活,给人一种“即用即付”的感觉。

    /**
     * pre:装饰者模式
     * 在不改变原有对象的基础上,给对象增加一些职责
     */
    //--------- 示例1 -----------
    var func = function() {
        alert(1);
    };
    var _func = func;
    func = function() {
        _func();
        alert(2);
    };
    func();
    //--------- 示例2 ----------
    /**
     * 上个示例会导致this丢失
     * 以下示例是使用aop模式为func动态的添加功能。
     */
    Function.prototype.before = function(beforeFn) {
        var _self = this;
        return function() {
            beforeFn.apply(this, arguments);
            _self();
        };
    };
    Function.prototype.after = function(afterFn) {
        var _self = this;
        return function() {
            _self();
            afterFn.apply(this, arguments);
        };
    };
    var func = function() {
        console.log(2);
    };
    var fn1 = function(){
        console.log(1);
    };
    var fn3 = function(){
        console.log(3);
    };
    func = func.before(fn1).after(fn3);
    func();
    /**
     * 装饰者模式与代理模式非常的像,两者都描述了怎样为对象提供间接的引用。
     * 它们最大的区别就是设计的意图和目的。
     * 1、代理模式的设计目的是,当访问本地不方便或者不需要访问本体时,为本体提供一个替代者。本体提供了关键的功能,代理提供或
     * 拒绝对它的访问,或者在访问本体之前做一些事情。代理模式强调的是一种本体和代理之间的关系,而这种关系在一开始就可以被确定。
     * 2、而装饰者模式,是为对象动态的添加行为。用于一开始不能确定对象的全部功能时。
     */
  • 相关阅读:
    python time库
    python urllib.request
    python random库
    python3中post请求 json 数据
    python3 中post处理json 数据
    python3中post和get请求处理
    ThinVnc-身份验证绕过(CVE-2019-17662)
    python3 获取博彩网站页面下所有域名(批量)
    Apache Solr Velocity模板注入RCE漏洞复现
    宽字节注入和防御
  • 原文地址:https://www.cnblogs.com/stinchan/p/7065256.html
Copyright © 2011-2022 走看看