设计模式之观察者模式

使用场景:

1、对一个对象的改动需要同时改动其他对象,但又不知道具体有多少对象
2、当一个抽象模型有两个部分,其中一个部分依赖于另外一个部分,将两个部分封装到独立的对象中以实现独立的复用
3、当一个对象必须通知其他对象,但又不知道其他对象时谁

涉及到的有:

抽象观察者:定义为一个接口,其中可以有任意数量的观察者。可以添加、删除抽象观察者
抽象被观察者:定义为一个接口
具体观察者:实现抽象观察者接口,得到消息时通知自己。
具体被观察者:实现抽象被观察者接口。

抽象被观察者:

public interface Watched {
    void addWatcher(Wather wather);
    void remove(Wather wather);
    void notifyWatchers();
}

具体被观察者:

eg:微信公众号为一个被观察者,在微信公众号中有新消息时,通知所有关注公众号的微信用户

public class WeChat implements Watched{
    List<Wather>  wathers = new ArrayList<Wather>();
    public void addWatcher(Wather wather) {
        wathers.add(wather);
    }

    public void remove(Wather wather) {
        wathers.remove(wather);
    }

    public void notifyWatchers() {
        for(Wather w :wathers){
            w.update();
        }
    }
}

抽象观察者:

public interface Wather {
    void update();
}

具体观察者:

eg:微信用户,得到消息时候更新自己

public class WeChatUser implements Wather {
    private String name;
    public WeChatUser(String name){
        this.name=name;
    }

    public void update() {
        System.out.println(name+" 收到更新消息!");
    }
}

测试类:

public class Test {
    public static void main(String[] args){
        WeChatUser user1 = new WeChatUser("遇见");
        WeChatUser user2 = new WeChatUser("sg");

        WeChat weChat = new WeChat();
        weChat.addWatcher(user1);
        weChat.addWatcher(user2);

        weChat.notifyWatchers();
    }
}

运行结果

这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值