面试了许多求职者,很多求职者只知其然,而不知所以然,写此文章为广大前端小伙伴指引迷津。纯干货!纯干货!纯干货!
目录
设计模式
什么是设计模式?
答:设计模式是对软件设计开发过程中反复出现的某类问题的通用解决方案。设计模式更多的是指导思想和方法论,而不是现成的代码,当然每种设计模式都有每种语言中的具体实现方式。
为什么要有设计模式?
答:学习设计模式更多的是理解各种模式的内在思想和解决的问题,毕竟这是前人无数经验总结成的最佳实践,而代码实现则是对加深理解的辅助。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。
常见的设计模式?
答:单例模式、观察者模式、发布订阅模式、装饰器模式、代理模式等。
单例模式
- 定义:允许类或对象具有单个实例,并且它使用全局变量来存储该实例。
- 实现方法:判断是否存在该对象的实例,如果已存在则不再创建。
- 使用场景:适用于业务场景中只能存在一个的实例,比如弹窗,购物车。
观察者模式
- 定义:在对象之间定义了一对多的依赖关系,就是多个观察者和一个被观察者之间的关系,当被观察者发生变化的时候,会通知所有的观察者对象,他们做出相对应的操作。
- 实现方法定义一个被观察对象,一个观察者。当被观察对象的状态发生改变通知观察者。
- 使用场景适用于业务场景中当一个对象的状态发生变化时,需要自动通知其他关联对象,自动刷新对象状态,比如数据劫持。
发布订阅模式
- 定义:是希望接收通知的对象(Subscriber)基于一个主题通过自定义事件订阅主题,发布事件的对象(Publisher)通过发布主题事件的方式通知各个订阅该主题的 Subscriber 对象。
观察者模式 VS 发布订阅模式
观察者模式与发布订阅模式都是定义了一个一对多的依赖关系,当有关状态发生变更时则执行相应的更新。
不同的是,在观察者模式中依赖于 Subject 对象的一系列 Observer 对象在被通知之后只能执行同一个特定的更新方法,而在发布订阅模式中则可以基于不同的主题去执行不同的自定义事件。
相对而言,发布订阅模式比观察者模式要更加灵活多变。
装饰器模式
- 定义:在不改变原来的结构和功能基础上,动态装饰一些针对特别场景所适用的方法或属性,即添加一些新功能以增强它的某种能力
- 实现方法创建了一个装饰类,用来包装原有的类
- 使用场景原有方法维持不变,在原有方法上再挂载其他方法来满足现有需求;函数的解耦,将函数拆分成多个可复用的函数,再将拆分出来的函数挂载到某个函数上,实现相同的效果但增强了复用性。比如Angular@component等
代理模式
- 定义:代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用。通俗的来讲代理模式就是我们生活中常见的中介。
- 实现方法定义一个委托者和一个代理,需要委托的事情在代理中完成
- 使用场景在某些情况下,不能直接引用一个委托对象,而代理类对象可以在客户类和委托对象之间起到中介的作用。Vue3 Proxy代理等。