You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
// DOM 绑定事件的兼容性处理functionaddEventFacade(el,eve,fn){if(el.addEventListener){el.addEventListener(eve,fn,false)}elseif(el.attachEvent){el.attachEvent('on'+eve,fn)}else{el['on'+eve]=fn}}
单例模式(
Singleton Pattern
)描述:
只对外暴露一个对象
观察者模式(
Observer Pattern
)真实场景:
以公众号为例,有些人订阅(关注)了某公众号,当公众号发布新的消息时,订阅者就会收到该消息的推送
描述:
定义对象之间的依赖关系,每当对象更改状态时,都会通知所有依赖项
发布-订阅模式(
Publish/Subscribe Pattern
)真实场景:
报社将报纸发送给邮局,邮局按照订阅关系将报纸发送给对应的人
描述:
消息的发送者(称为发布者)不会将消息直接发送给特定的接收者(称为订阅者)。而是将发布的消息分为不同的类别,无需了解哪些订阅者。同样的,订阅者可以订阅一个或多个类别,只接收感兴趣的消息,无需了解哪些发布者
观察者模式 vs 发布-订阅模式
如上图
Subject
)和观察者(Observer
)是强耦合,有直接的联系,相互知道对方的存在。Subject
)和观察者(Observer
)是松耦合,没有直接的联系,是通过“事件通道”(调度中心)建立联系,互相不知道对方存在。奇葩解释:观察者模式,没中间商赚差价;发布-订阅模式,有中间商赚差价 😆
工厂模式(
Factory Pattern
)适配器模式(
Adapter Pattern
)真实场景:
现在好多智能手机都去掉了
3.5mm
的耳机孔,取而代之的是Type-C
接口耳机。但是你还想在新手机中使用3.5mm
的老式耳机怎么办?没错,那就需要用适配器,
Type-C
转3.5mm
的适配器。如下图 😆:描述:
可以将其他不兼容的对象包装在适配器中,使它与另一个类兼容
装饰者模式(
Decorator Pattern
)真实场景:
先建一个基础版本的手机,经过再加工对手机进行装饰润色,
描述:
装饰者模式,允许你通过将对象包装在装饰器类的对象中,来动态更改对象在运行时的表现行为
外观模式(
Facade Pattern
)真实场景:
如何让手机开机?很简单,“长按电源键”即可开机。实际上手机内部处理了很多逻辑才能实现它。这就是所谓的外观模式,将复杂转为简洁。
例如,开发时常用于浏览器兼容性处理的代码。
描述:
为复杂的子系统提供了简化统一的界面
代理模式(
Proxy Pattern
)真实场景:
你可以直接去专卖店买手机(某海外品牌),也可以通过代购帮你买手机(这样价格会便宜些)。让代购买手机这种方式,就是所谓的代理模式。
js
原生也支持代理模式 Proxy描述:
用一个对象来表示另一个对象的功能
策略模式(
Strategy Pattern
)真实场景:
商店打折促销,某商品买
1
件原价,2
件8
折,3
件7
折描述:
在代码运行时,根据不同情况切换不同的策略(方法)
状态模式(
State Pattern
)描述:
在状态更改时更改类的行为(方法)
参考
The text was updated successfully, but these errors were encountered: