代理模式
大白话: 为一个对象有效的控制,增删改查,都可以剪头,代理的对象可以当成一个分身;
详细讲解
- 核心思想:访问一个类时候,可以监听做一些控制;
- 解决什么:在直接访问是带来一系列的问题。比如:访问对象在远程机器上;等等
- 何时使用:在需要控制对象,进阶监听,获取提供访问;
- 如何实现:使用Proxy
生活案例:
- 商务助手,谈生意需要先去找助手,助手判断对方是否满足,是则在通知老板;
- 猪八戒高老庄找媳妇,结果是孙悟空变的,孙悟空就是女生代理。
- 网上买东西。APP就是代理东西。然后用户在网上买,线下收到则发货;完成交易
- Windows 软件分享快捷键到桌面
实战案例
- vue响应式监听
- 移动端模拟键盘 & 虚拟键盘
- 科学上网梯子
优点
- 职责清晰
- 高扩展性
- 智能化
缺点
- 因为访问过程中间加了处理,相比直接访问速度变慢;
- 实现代理需要很多额外工作,有些代理模式实现非常复杂;
代码实现
// 受代理人
let user = {
name: "小红",
age: 15
};
// 用户代理人
const userProxy = new Proxy(user, {
get(target, key) {
let result = target[key];
if (key === "age") result += "岁";
return result;
},
set(target, key, value) {
if (key === "age" && typeof value !== "number") {
throw Error("age字段必须为Number类型");
}
return Reflect.set(target, key, value);
}
});
// 处理访问
console.log(`${userProxy.age}`); // 打印:15岁
// 处理修改
userProxy.age = "abc"; // 打印:报错。必须传number