前言
这个是B站学习视频的笔记,视频链接:https://www.bilibili.com/video/BV1Ki4y177LN
更多关于前端设计模式的知识,请看《JavaScript设计模式》一书;
链接:https://pan.baidu.com/s/17YiAJu7drAK9b3BJEVRyZQ
提取码:3ecv
复制这段内容后打开百度网盘手机App,操作更方便哦
下面是软考中的设计模式汇总:

代理模式
在代理模式(Proxy Pattern)中,一个类代表另一个类的功能。这种类型的设计模式属于结构型模式。
真实对象 — 代理对象 — 用户
下面举例花店工作人员代理男同学给女同学送花:
1 | // 代理模式 |
下面举例图片懒加载:
1 | // 正常写法 |
观察者模式
又称为发布-订阅模式。当对象间存在一对多关系时,则使用观察者模式(Observer Pattern)。比如,当一个对象被修改时,则会自动通知依赖它的对象。观察者模式属于行为型模式。
1 | var event = { |
上面的被观察者就是shopObj.list里面的值了。
装饰器模式
装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。
ES5写法和ES6写法
1 | // 原生形式(缺点:耦合高) |
应用 — 给方法添加日志
1 | // 装饰器应用 -- 给方法添加日志 |
扩展:根据上面的应用例子,给装饰器方法添加参数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 class Math {
@log(100)
add(a, b) {
return a + b;
}
}
function log(num) {
return funcion(target, key, descriptor) {
var _num = num || 0;
// descriptor.value 这里对应被装饰的方法(注意和key不同,不是方法名,是方法的引用)
var oldValue = descriptor.value
// 重构add方法
descriptor.value = function(...arg) {
// 改变原有参数值
arg[0] += _num;
arg[1] += _num;
console.log(`调用 ${key}, 参数是:`, arguments)
return oldValue.apply(target, arguments)
}
return descriptor;
}
}
var math = new Math()
math.add(1, 3)
职责链模式
顾名思义,责任链模式(Chain of Responsibility Pattern)为请求创建了一个接收者对象的链。这种模式给予请求的类型,对请求的发送者和接收者进行解耦。这种类型的设计模式属于行为型模式。
在这种模式中,通常每个接收者都包含对另一个接收者的引用。如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,依此类推。
本文链接: http://www.ionluo.cn/blog/posts/e3d250c9.html
版权声明: 本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。转载请注明出处!
