美文网首页让前端飞
从TJ大神源码中学习代理模式

从TJ大神源码中学习代理模式

作者: 陈小俊先生 | 来源:发表于2018-07-11 17:09 被阅读8次

我们知道koa中有个context对象,context表示请求的上下文。今天在看这段代码的时候,发现了tjgit自己写的一个代理模式,觉得不错,记录一下。

地址:[delegates源码]https://github.com/tj/node-delegates/blob/master/index.js

设计模式中的代理模式是什么意思呢?

代理可以简单理解为:

为其他对象提供一种代理以控制对这个对象的访问。

context其实是responserequest的代理,将两者的一些方法注册到context上,这样通过context就可以访问到请求的上下文。

看看源码:

function Delegator(proto, target) {
  // 这样写是为了兼容直接调用delegate(proto, 'response')
  // 这样也能返回一个对象
  if (!(this instanceof Delegator)) return new Delegator(proto, target);

  // 工厂模式注册各种方法
  this.proto = proto;
  this.target = target;
  this.methods = [];
  this.getters = [];
  this.setters = [];
  this.fluents = [];
}

method方法

Delegator.prototype.method = function(name){
  var proto = this.proto;
  var target = this.target;
  this.methods.push(name);

  proto[name] = function(){
    // 通过apply将this绑定到原对象,使用当前参数
    return this[target][name].apply(this[target], arguments);
  };

  return this;
};

getter和setter:


Delegator.prototype.getter = function(name){
  var proto = this.proto;
  var target = this.target;
  this.getters.push(name);

  proto.__defineGetter__(name, function(){
    return this[target][name];
  });

  return this;
};

Delegator.prototype.setter = function(name){
  var proto = this.proto;
  var target = this.target;
  this.setters.push(name);

  proto.__defineSetter__(name, function(val){
    return this[target][name] = val;
  });

  return this;
};

用法:


delegate(proto, 'response')
  .method('attachment')
  .method('redirect')
  .method('remove')
  .method('vary')
  .method('set')
  .method('append')
  .method('flushHeaders')

tj代码,就是程序员的教科书。

相关文章

  • 从TJ大神源码中学习代理模式

    我们知道koa中有个context对象,context表示请求的上下文。今天在看这段代码的时候,发现了tjgit自...

  • Retrofit的设计模式 -- 动态代理模式

    Retrofit中的动态代理模式 最近有时间开始了看源码的节奏,看了Retrofit源码上来就看到了动态代理模式,...

  • Java中的代理模式

    因为Retrofit剖析源码的时候会用到ava中的代理模式,所以这篇就先回忆一下代理设计模式。代理模式分为两种:代...

  • 设计模式整理(1) 代理模式

    学习《Android 源码设计模式解析与实践》系列笔记 介绍 生活中,存在很多代理模式的影子。 例如我们想要买一辆...

  • 代理模式

    本文参考《Android源码设计模式解析与实战第2版》 代理模式的定义 代理模式也称为委托模式,是为其他对象提供代...

  • 设计模式-代理模式

    今天想阅读Retrofit的源码,发现一开始就是一个代理。对代理的模式又不是很了解。学习了一波。 什么是代理 我们...

  • 一日一学_okhttp(设计模式)

    OkHttp 源码中设计模式还是值得我学习借鉴的。 OkHttp设计模式 源码分析:http://blog.pia...

  • 认识代理模式-终极篇

    通过学习本篇博文,你将彻底明白代理模式在JAVA世界中的应用。 1.代理模式 日常现实生活中的代理有很多:火车票/...

  • JAVA代理模式深入了解(一)

    目前学习阶段,有问题请帮忙指出,谢谢 代理模式有三种: 静态代理模式 jdk动态代理模式 cglib动态代理模式 ...

  • 从源码中学习设计模式

    title: 从源码中学习设计模式date: 2020-08-20description: 设计模式很枯燥,...

网友评论

    本文标题:从TJ大神源码中学习代理模式

    本文链接:https://www.haomeiwen.com/subject/huohpftx.html