常说的设计模式是23种设计模式,分为3大类:
- 创建型模式5种:工厂方法、抽象工厂、单例、建造者、原型
- 结构型模式7种:适配器、代理、桥接、装饰者、外观、享元、组合
- 行为型模式11种:模板方法、解释器、策略、观察者、迭代器、职责链、命令、备忘录、状态、访问者、中介者。
上次咱们说了策略模式,今天咱们来说“观察者模式”。
如果要理解“观察者模式”关键在于理解“观察者”。对于行为型模式来说,观察这个行为是“观察者观察被观察者”。所以,我们构建的程序,要分两个部分,一部分是“观察者”,一部分是“被观察者”。当然,“观察者”与“被观察者”之间的关系是我们强加给程序的意义。实际上,需要注意数据流向,从而读懂代码真正的逻辑。
先建立用户程序,用户要有一个能更新或者能接收信息的行为:
所以接口定义为:
用户的实现类:
在建立一个支持多用户的程序,需要对多用户进行管理,也就是要有添加用户的行为,删除用户的行为以及执行用户更新的行为。
所以,接口定义为:
接口的实现类中,由于支持多用户,所以用一个集合来存储多个用户对象。
当执行attach方法时,添加一个用户对象
当执行detach,注销一个用户对象
当执行notifyObserver,执行所有已注册用户对象的更新方法
应用如下:
“ConcreteSubject”实现类实例化对象后,调用“attach”添加一个“ConcreteObserver”对象,用“notifyObserver”执行所有已注册用户的“update”更新。
下面咱们来看一下适用场景:比如说:一个神有很多的宠物,神只要一个“神之呼唤”就能让他麾下的所有宠物执行命令。
先建立宠物的接口:宠物必须有更新的方法。也就是接收神的信息的方法。
实现一个宠物龟
在建立神的接口,要能够添加宠物对象,移除宠物对象以及执行宠物行为并发送命令。
实现接口的神:
“attch”添加宠物对象
“detach”移除宠物对象
“notifyPet”使全部宠物听令
实际应用时:神的对象添加宠物“萨瓦”和“迪卡”并发送指令“来~来~来~”
最终宠物所有宠物接收到神的命令。