Comments (1)
代理模式
代理模式的主要意义是实现功能的解耦,即满足单一职责原则,可以简单的理解为在某个满足单一职责的类外面用与之相同的接口对它包裹一层,进而实现对原类的增强。
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)
- 设计模式之「行为型模式」 HOT 3
- 分析生产环境的 Promise 实现,完整理解 Promise 原理
- 跟着 Event loop 规范理解浏览器中的异步机制 HOT 20
- _deprecated
- 简要分析前端代码从 Babel 编译到打包的流程
- [译] 资源提示 —— 什么是 Preload,Prefetch 和 Preconnect? HOT 4
- [译] Prefetch & preconnect-dns 的优先级 HOT 3
- 从一个极简 Node 服务器的实现中能学到什么?
- 浅谈 HTTP 缓存实践 HOT 3
- LazyMan 有几样写法,你知道么? HOT 4
- 浅析 React v16.3 新生命周期函数 HOT 1
- create-react-app 原理及源码分析 HOT 2
- Webpack 中 path/publicPath/contentBase 的关系 HOT 1
- koa2 源码及流程分析 HOT 1
- Knowledge fragment
- Knowledge fragment
- Knowledge fragment
- 如何优雅地彻底解决 antd 全局样式问题 HOT 9
- 不准备继续翻译了么
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
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.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from blog.