概述
一个工作了5年的,去字节面试,在第一面遇到这样一个问题
“请你介绍一些策略模式和观察者模式?”
这个思路突然就短路了,不知道该怎么回答?
问题分析
在Java里面,有23种设计模式
而在实际开发中,用到的设计模式屈指可数,主要有两方面的原因
1、目前的开发模式,基本上按照MVC这一套在搞,大部分业务逻辑的实现都不复杂
2、对设计模式的理解不够,只能生搬硬套,不仅仅没带来好处,还让程序处理变得更麻烦
但是,设计模式确实是无数前辈在软件开发过程中总结的一些经验,他们能够使得程序更加灵活可扩展。
有人把它总结成了公式化的23种设计模式,导致大家以为按照这个公式去搬运就可以,但实际上认为。
设计模式应该是一种软件设计的思想或者方法论,它不应该固化成某种特定的公式,它的运用应该更加灵活。
这23种设计模式可以分成三种类型分别是创建型、结构型、行为型。
策略模式和观察者模式属于行为型模式。
行为型模式主要用来描述多个类和对象之间的相互协同完成单个对象无法单独完成的任务,除了这两种以外,还包括模版方法、状态模式、责任链模式、解释器模式等。
问题解答
策略模式和观察者模式属于行为型模式。
策略模式主要是用在根据上下文动态控制类的行为的场景:
一方面可以解决多个if...else判断带来的代码复杂性和维护性问题
另一方面,把类的不同行为进行封装,使得程序可以进行动态的扩展和替换,增加了程序的灵活性。像支付路由这种场景,就可以使用策略模式实现。
观察者模式主要用在一对多的对象依赖关系的中,实现某一个对象状态变更之后的感知的场景
一方面可以降低对象依赖关系的耦合度,弱化依赖关系。
另一方面,通过这种状态通知机制,可以保证这些依赖对象之间的状态协同。
在Spring源码里面有大量运用这种观察者模式实现事件的传播和感知。
总结
要想真正理解设计模式的精髓并且能灵活运用,需要多去阅读一些优秀的源码,比如Spring,否则设计模式永远只会停留在纸上无法落地。