设计模式课时八------观察者模式

观察者模式

定义:观察者模式又叫发布订阅模式,定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。

典型应用:
1.侦听事件驱动程序设计中的外部事件。
2.侦听/监视某个对象的状态变化。
3.发布者/订阅者模型中,当一个外部事件被触发(新的产品/消息出现)时,通知邮件列表的订阅者。

优点:
对象之间可以进行同步通信,可以同时通知一到多个关联对象,对象之间的关系以松耦合的形式组合,互不依赖。

两个版本:
1.目标对象发生变化时,仅告诉观察者我变化了,变化细节需要自己从目标对象中得到。-------拉模式
2.目标对象发生变化时,通过参数将变化细节一同传递给观察者。 -----推模式

/**
 * 观察者模式
 * 地球  Earth    被观察者
 * 气象卫星Satellite 观察者
 * 气象局 Demo       调用者
 */
package Abstract.observer;

import java.util.Observable;
import java.util.Observer;

class Earth extends Observable
{
    private String weather = "晴朗";

    public String getWeather()
    {
        return weather;
    }

    public void setWeather(String weather)
    {
        this.weather = weather;
        //设置变化点
        setChanged();
        //通知
        notifyObservers(weather);
    }

}
class Satellite implements Observer
{
    private String weather ;
    @Override
    public void update(Observable o, Object arg)
    {
        weather = (String)arg;
        System.out.println("近期天气变化:"+weather);
    }
}

public class Demo
{
    public static void main(String[] args)
    {
        Earth earth = new Earth();
        Satellite satellite = new Satellite();
        //发射微型 (添加观察者)
        earth.addObserver(satellite);
        System.out.println("开始播报天气状况:");
        System.out.println("--------------------");
        earth.setWeather("台风来袭");
        earth.setWeather("近期有大到暴雨");
        earth.setWeather("暴雨结束,天气晴朗");
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值