Dawn's Blogs

分享技术 记录成长

0%

Easy搞定Golang设计模式 (7) 行为型模式之策略模式 观察者模式

策略模式

策略模式中,可以随意的更换算法使用的策略。策略模式的角色和职责如下:

  • 环境类(Context):环境类是使用算法的角色,它在解决某个问题时可以采用多种策略。在环境类中维持一个对抽象策略类的引用实例,用于定义所采用的策略。
  • Strategy(抽象策略类):定义了策略抽象方法,在环境类的算法中调用了抽象策略类中的抽象方法,所以在具体执行时会调用具体策略类中定义的方法。
  • ConcreteStrategy(具体策略类):实现了抽象策略类,定义了具体的策略方法。

image-20230424223552253

案例

image-20230424224107863

观察者模式

观察者模式是用于建立一种对象与对象之间的依赖关系,一个对象发生改变时将自动通知其他对象,其他对象将相应作出反应。在观察者模式中,发生改变的对象称为观察目标,而被通知的对象称为观察者,一个观察目标可以对应多个观察者,而且这些观察者之间可以没有任何相互联系,可以根据需要增加和删除观察者,使得系统更易于扩展。

观察者模式中的角色和职责:

  • 被观察的目标(Subject):被观察的对象。当需要被观察的状态发生变化时,需要通知(Notify)队列中所有观察者对象。Subject 需要维持一个观察者对象的队列列表
  • 具体的被观察目标(ConcreteSubject):被观察者的具体实现。
  • 观察者(Observer):抽象类,当 Subject 的状态发生变化时,Observer 对象将通过一个 callback 函数(Update)得到通知
  • 具体的观察者(ConcreteObserver):观察者的具体实现。

image-20230424225621209