java设计模式之观察者模式

观察者模式的定义:定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,他的所有依赖都会收到通知并自动更新;

观察模式的设计原则:为了交互对象之间的松耦合而努力,观察者模式为什么能实现对象之间的松耦合,因为被观察者(或者叫主题Subject)Observable和观察者Observer之间是不直接进行交互的,改变被观察者和观察者任何一方的代码改变并不会影响另一方。

现实的类比:观察者模式也叫订阅者模式,相当于现实社会中的订报纸,只要你订阅了某份报纸,每天都能收到新发行的报纸,如果哪天你不需要订阅了直接取消订阅就可以了,java内置了观察者模式,下面我们以java内置的观察者模式举个简单的例子:

 

被观察者必须继承Observable类:

package observer;

import java.util.Observable;

/**
 * Observable是java内置的主题(Subject),也是被观察者
 * Observable帮助我们实现了注册观察者、注销观察者等
 * 一些列基础操作
 *
 *
 */

public class ObserverImp extends Observable {

    //被订阅的消息
    private String message;

    //订阅模式分为push(推)和pull(拉)两种方式,我们这里
    //实现拉的方式,所以提供get方法
    public String getMessage(){
        return message;
    }

    public void setMessage(String message){
        this.message = message;
    }

    //触发推送消息的操作,setChanged和notifyObservers
    public void sendmsg(){
        setChanged();
        notifyObservers();
    }

    public static void main(String[] args) {
       //生成一个被观察者
        ObserverImp observerImp = new ObserverImp();
        observerImp.setMessage("我是发给观察者的一条消息");
       //生成一个观察者,并订阅被观察者
        observerImp.addObserver(new Observers());
        //被观察者发送一条状态消息时,观察者应该能收到该消息
        observerImp.sendmsg();
    }
}

观察者必须实现Observer接口:

package observer;

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

/**
 * Observer是java内置的观察者,实现Observer接口并实现
 * update方法就能实现消息的动态接收
 */

public class Observers implements Observer {
    @Override
    public void update(Observable o, Object arg) {
        if(o instanceof ObserverImp){
            System.out.println("观察这得到一个通知, 通知的消息=" + ((ObserverImp)o).getMessage());
        }
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值