观察者模式运用

it2023-02-10  48

目录

名词解释:

定义对象间一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。

现实生活举例:

农户的家里有一只穷凶极恶的,让家里老鼠们苦不堪言。这天,老鼠们趁着猫在午睡准备去厨房借点东西吃,并一直盯着猫,猫睡懵了,了一声,吓得老鼠们四散而逃

模式解析:

:被观察者

老鼠:观察者(多个)

盯着:观察

:通知(并不是 猫真的去通知老鼠,快跑我要醒了)

四散而逃:更新操作(老鼠观察猫的动作——,并做出相应动作——逃跑

代码:

1. 观察者父类

public abstract class Mouse { protected Cat cat; //猫 被观察者 public abstract void escape(); //逃跑 }

 2. 观察者子类(多个)

public class MouseA extends Mouse { public MouseA(Cat cat) { this.cat = cat; this.cat.attch(this); } @Override public void escape() { System.out.println("老鼠A向东逃跑了!"); } }

 3. 被观察者

import java.util.ArrayList; import java.util.List; public class Cat { private List<Mouse> mouses = new ArrayList<>(); public void attch(Mouse mouse) { // 关联 mouses.add(mouse); } public void meow() { // 猫叫 通知 System.out.println("猫叫"); for (Mouse mouse : mouses) { mouse.escape(); } } }

4. 测试

public class Demo { public static void main(String[] args) { Cat cat = new Cat(); new MouseA(cat); // 老鼠A观察猫 new MouseB(cat); // 老鼠B观察猫 cat.meow(); // 猫叫 } }

 5. 运行结果

猫叫 老鼠A向东逃跑了! 老鼠B向北逃跑了!

当然,也有其他的实现形式。猫也可以添加其他的动作,老鼠也会做出相应的动作,比如:猫一跳舞,老鼠就拜年! 

应用试题

1. 使用观察者模式模拟实现订阅功能。

2. 在拍卖会中,拍卖师会观察最高标价,然后通知给其他竞价者,请模拟场景。

3. 在学校里,同学们听到铃声下课出去玩,有的则放学,请模拟实现。

 

欢迎留言讨论,或有好的观点和建议可留言联系。

 

 

最新回复(0)