观察者模式运用

目录

名词解释:

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

现实生活举例:

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

模式解析:

:被观察者

老鼠:观察者(多个)

盯着:观察

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

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

代码:

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. 在学校里,同学们听到铃声下课出去玩,有的则放学,请模拟实现。

 

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

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值