Giter VIP home page Giter VIP logo

Comments (1)

fi3ework avatar fi3ework commented on June 15, 2024

代理模式

代理模式的主要意义是实现功能的解耦,即满足单一职责原则,可以简单的理解为在某个满足单一职责的类外面用与之相同的接口对它包裹一层,进而实现对原类的增强。

React 中的高阶组件(这里专指属性代理高阶组件)其实就是代理的一种应用,所以也被更准确的叫做属性代理的高阶组件,高阶组件定义与被代理组件一致的 props,这也是实现代理模式的关键 —— 代理和本体接口的一致性。

代理其实可以说是在不修改被代理对象的前提下对被代理对象的加强。

实现

代码实现

// plus function
const plus = (...args) => {
  return args.reduce((accu, curr) => {
    return accu + curr
  }, 0)
}

// mult function
const mult = (...args) => {
  return args.reduce((accu, curr) => {
    return accu * curr
  }, 1)
}

// proxy factory
const createProxyFactory = (fn) => {
  let cache = {}
  return (...args) => {
    let argsId = args.join(',')
    if (Object.keys(cache).indexOf(argsId) >= 0) {
    	console.log('read from cache')
      return cache[argsId]
    }
    return cache[argsId] = fn.apply(this, args)
  }
}

const proxyPlus = createProxyFactory(plus)
const proxyMult = createProxyFactory(mult)

let m1 = console.log(proxyMult(2, 3, 4)) // 24
let m2 = console.log(proxyMult(2, 3, 4)) // read from cache 24
let p1 = console.log(proxyPlus(2, 3, 4)) // 9
let p2 = console.log(proxyPlus(2, 3, 4)) // read from cache 9

from blog.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.