前言
- 设计模式是leetcode之外,顶级大厂代码能力的测试题。JavaScript设计模式为你提供了一种结构化的、可重复的方法来解决JavaScript开发中经常出现的问题。
今天我们来聊聊设计模式中的代理模式。我会使用通俗易懂的语言与生动有趣的例子,附上代码,带大家了解这一种设计模式~
正文
1.对象
对象是一种复杂的数据类型,对象的本质是属性加方法,请看下面这段代码来了解什么是对象
const kunkun = {
name: 'kunkun',
age:20,//数值类型
hometown: '南昌',
girlfriend:null,//null 空
city:undefined,//未定义
hobbies:['刷剧','看小说'],//数组也是对象
isSingle: true,//布尔值
}
我们使用对象字面量的方法创建了一个对象实例 kunkun,并赋予了几个属性,name,age,hometown,girlfriend,city,hobbies,issinggle
-
. 对象字面量:JavaScript中创建一个自定义对象有两种方法,一种是使用new,另一种是使用对象字面量形式。对象字面量是一个名值对列表,每个名值对之间用逗号分隔,并用一个大括号括起。 各名值对表示对象的一个属性,名和值这两部分之间用一个冒号分隔。
20岁的坤坤还是单身,当他喜欢上了校花小美时,当然就要给女神送花花咯
const xm = {
name: '小美',
xq: 20,
hometown: '丰城',
}
20岁的小美深深的吸引着坤坤,害羞的坤坤不好意思直接送花给小美,于是通过小美的室友小红来传递他的心意
name: '小红',
hometown: '抚州',
//实现了和小美一样的接口,就可以互换
receiverFlower: function (sender) {
console.log('收到' + sender.name + '鲜花');
//if (sender.name === '坤坤){
console.log('啊,让我们在一起吧....');
//}
setTimeout(function () {
xm.xq = 99;
xm.receiverFlower(sender);
}, 2000)
}
}
代理模式
const xh = {
name: '小红',
hometown: '南昌',
// method 接口 Interface
receiveFlower(sender){
if(xmemotion >= 80){
xmreceiveFlower(sender)
}
else{
setTimeout(function(){
xmemotion = 99
xmreceiveFlower(sender)
},2000) //在2秒后,小美心情变成99
}
kunkunlower(xh)
//输出 小美收到坤坤
// 我们在一起吧
在这里我们运用到了代理模式,代理模式是一种通过代理对象对真实对象的访问:坤坤把花给小红,通过小红观察小美的心情,当xmemotion >= 80时,小红把花转交给小美,坤坤就可以和小美在一起了。