JavaScript 设计模式 装饰器模式

发布于 2024-12-12 12:17:55 字数 2031 浏览 5 评论 0

装饰器是 一种为对象添加新特性的技术 ,它并不适用创建新子类的这种手段。装饰器模式可以用来透明的把对象包装在具有同样接口的另一个对象中。这样我们就可以为对象添加一个方法或一些行为,然后将方法调用传递给原始对象

//装饰者模式:就是在保证不改变原有对象的基础上,去扩展一些想要的方法或需求
// 实现同样的借口
// 需要有子类
/*
  var CarInterface = new BH.Interface('CarInterface' , ['getPrice' , 'assemble']);
  var Car = function(car){
    //就是为了让子类继承的 (让子类 多一个父类的引用)
    this.car = car ; 
    //检查接口
    BH.Interface.ensureImplements(this , CarInterface);
  };
  Car.prototype = {
    constructor :Car,
    getPrice:function(){
    return 200000 ; 
    },
    assemble:function(){
    document.write('组装汽车...');
    }
  };

  //新的需求:light、icebox .......

  var LightDecorator = function(car){ //原始对象
    //借用构造函数继承
    LightDecorator.superClass.constructor.call(this , car);
  };
  BH.extend(LightDecorator , Car);  //原型继承 

  LightDecorator.prototype = {
    constructor:LightDecorator , 
    getPrice:function(){
    return  this.car.getPrice() + 10000; 
    },
    assemble:function(){
    document.write('组装车灯...');
    }    
  };

  var IceBoxDecorator = function(car){
    //借用构造函数继承
    IceBoxDecorator.superClass.constructor.call(this , car);    
  };
  BH.extend(IceBoxDecorator , Car);  //原型继承 

  IceBoxDecorator.prototype = {
    constructor:IceBoxDecorator , 
    getPrice:function(){
    return  this.car.getPrice() + 20000; 
    },
    assemble:function(){
    document.write('组装车载冰箱...');
    }    
  };  



  var car  = new Car();
  alert(car.getPrice());
  car.assemble();

  car = new LightDecorator(car);
  alert(car.getPrice());
  car.assemble();  

  car = new IceBoxDecorator(car);
  alert(car.getPrice());
  car.assemble();    

  */


//装饰者 不仅可以用在类上, 还可以用在函数上

/*
  //返回一个当前时间的字符串表示形式
  function getDate(){
    return (new Date()).toString();
  };

  // 包装函数 (装饰者函数)
  function upperCaseDecorator(fn){
    return function(){
    return fn.apply(this, arguments).toUpperCase();
    }
  };

  alert(getDate());

  var getDecoratorDate = upperCaseDecorator(getDate);

  alert(getDecoratorDate());
  */

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

溇涏

暂无简介

文章
评论
25 人气
更多

推荐作者

吝吻

文章 0 评论 0

Jasmine

文章 0 评论 0

∞梦里开花

文章 0 评论 0

阳光①夏

文章 0 评论 0

暮念

文章 0 评论 0

梦里泪两行

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文