Java设计模式之观察者模式

模式介绍

观察者模式定义了一些列对象之间的一对多关系。当一个对象改变状态,其他依赖者都会收到通知。观察者模式提供了一种对象设计,让主题和观察者之间松耦合。

应用场景

在生活中有很多观察者的模式应用,譬如我们用手机短信订阅移动公司的天气预报,我们和移动公司就是观察者和目标的关系,还有我们订阅微信公众号等等。

例子说明

下面写一个关于微信公众号订阅的demo来演示一下观察者模式。

uml图
这里写图片描述
观察者接口

/**
 * 观察者接口
 */
public interface Observer {
    /**
     * 更新内容
     * @param content
     */
    public void update(String content);
}

观察者A

/**
 * 观察者A
 */
public class A implements Observer{

    @Override
    public void update(String content) {
        // TODO Auto-generated method stub
        System.out.println("我是A,我接收到的信息:"+content);
    }

}

观察者B

/**
 * 观察者B
 */
public class B implements Observer{

    @Override
    public void update(String content) {
        // TODO Auto-generated method stub
        System.out.println("我是B,我接收到的信息:"+content);
    }

}

平台接口

/**
 * 平台接口
 * @author S
 *
 */
public interface Platform {
    /**
     * 注册观察者
     * @param o
     */
    public void register(Observer o);

    /**
     * 移除观察者
     * @param o
     */
    public void unregister(Observer o);

    /**
     * ֪ͨ通知观察者
     * @param content
     */
    public void notifyMessage(String content);

}

微信公众平台

/**
 * 微信公众平台
 * @author S
 *
 */
public class WeChatPlatform implements Platform{

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

    @Override
    public void register(Observer o) {
        // TODO Auto-generated method stub
        list.add(o);
    }

    @Override
    public void unregister(Observer o) {
        // TODO Auto-generated method stub
        list.remove(o);
    }

    @Override
    public void notifyMessage(String content) {
        // TODO Auto-generated method stub
        for(int i=0;i<list.size();i++){
            list.get(i).update(content);
        }
    }

}

测试

/**
 * 观察者模式
 * @author S
 *
 */
public class Main {
    public static void main(String args[]){
        WeChatPlatform platform = new WeChatPlatform();
        A a = new A();
        B b = new B();
        //用户订阅平台,添加观察者
        platform.register(a);
        platform.register(b);
        //发送消息给订阅者
        platform.notifyMessage("上午天气很好");
        //用户取消订阅平台,移除观察者
        platform.unregister(a);
        //发送消息给订阅者
        platform.notifyMessage("下午要下雨");
    }
}

打印结果

我是A,我接收到的信息:上午天气很好
我是B,我接收到的信息:上午天气很好
我是B,我接收到的信息:下午要下雨
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值