装饰器模式
- 在不改变原有的结构和功能 为对象添加功能
- 装饰模式有时候比继承更加灵活
在不改变原有的结构和功能 为对象添加功能
1 | class Duck{ |
打印: 吃苹果 谢谢
解析:Duck原组件没有改变,TangDuck对它做了增强,除了原有的之外添加了额外的逻辑
装饰模式有时候比继承更加灵活
装饰器模式是将一个对象嵌入另一个对象之中,实际上相当于这个对象被另一个对象包装起来,形成一条包装链。请求随着这条链条依次传递到所有的对象,每个对象有处理这个请求的机会。
下面是链式的水+咖啡+奶+糖=13的示例
1 | class Coffee{ |
AOP
面向切面编程
就是在函数执行之前或之后添加一些额外的逻辑,而不需要函数的功能。
应用场景
埋点
埋点分析,是网站分析的一种常用的数据采集方法
埋点方式
- 服务器层面的:主要是通过客户端的请求进行分析
- 客户端层面的:通过埋点进行相应的分析
- 代码埋点
- 自动化埋点:通过AOP思想对相应的方法进行统计
- 第三方实现 百度、友盟等…
1 | <body> |
1 | let express = require('express'); |
表单校验
1 | <body> |
express 不太一样,但是koa和这个原理是一样的
axios的interceptor就是依据这个写的
类装饰器 | 方法装饰器
1 | @testable |
观察者模式
1 | class Star{ |
观察者模式区别于发布订阅模式:
- 被观察者和观察者是耦合的(被观察者内部保存观察者的引用地址的数组用来通知观察者的)
- 观察者的update动作是由被观察者调用的
发布订阅模式
1 | class Agent{ // 中介 |
打印
1 | 我看到中介的新房源了 60平 4000元 |
应用场景:
微信公众号,你关注了微信公众号,微信公众号就会给粉丝推消息,微信公众号就是一个主题,粉丝就是观察者。
微博,观察者模式的精髓就是,主题持有观察者的引用,所以才能实现 主题发生改变,观察者能响应到主题发生的变化。一个动作发生了改变,其他几个动作也要发生改变。业务场景就这样。