设计模式之观察者模式

概述

日常生活中,我们在某个应用中订阅某一主题的信息,那么该应用会向我们推送我们所订阅类型的相关信息;或者说我们定了X类型的报纸,那么送报员每天会给我们送来X类型的报纸,让我们能够得知该类型的最新动态。以上的两种场景,就是观察者模式的表现。我们就像是观察者,而我们订阅的主题就像是被观察者,只要他们有最新的消息(更新)就会来通知我们,使我们可得知最新的动态,方便我们作出一系列的操作等。

观察者模式

直接上代码

//观察者抽象类
public interface Observer {

    void update(String str);
}

//具体的观察者
public class ContentObserver implements Observer {

    @Override
    public void update(String str) {
        System.out.println("receive--"+str);
    }

}

//主题最上层
public interface Stub {

    //注册观察者
    void regist(Observer observer);

    //解除观察者
    void unregist(Observer observer);

    //通知
    void notifyUpdate(String str);
}

//具体的主题
import java.util.*;

public class ContentStub implements Stub {

    private List<Observer>list=new ArrayList<Observer>();

    @Override
    public void regist(Observer observer) {
        if(list!=null)
            list.add(observer);
    }

    @Override
    public void unregist(Observer observer) {
        list.remove(observer);
    }

    @Override
    public void notifyUpdate(String str) {
        for (Observer observer : list) {
            observer.update(str);
        }
    }
}

//客户端
        Stub s=new ContentStub();
        Observer o=new ContentObserver();

        s.regist(o);
        s.notifyUpdate("have a new data");

        s.unregist(o);


输出结果:receive--have a new data

优点:高度解耦,将主题与观察者分开,观察者不在乎主题里面的内部实现。
缺点:执行效率低,在多观察者时,如果其中一个在接收过程中出现问题(比如停顿),那么会影响到在它后面的观察者。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值