观察者模式

定义

观察者模式又称为发布订阅模式。

定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者,使他们能够自动更新自己。


场景举例

微信公众号订阅。


具体实现

定义发布者接口Observable

public interface Observable {
    // 注册观察者
    void registerObserver(Observer o);
    // 删除观察者
    void removeObserver(Observer o);
    // 向所有观察者发布通知
    void notifyObserver();
}

定义微信公众号服务类实现了Observable接口 

public class WeChatServer implements Observable {
    private List<Observer> list = new ArrayList<>();
    private String message;
    // 注册观察者
    @Override
    public void registerObserver(Observer o) {
        list.add(o);
    }
    // 删除观察者
    @Override
    public void removeObserver(Observer o) {
        if (!list.isEmpty()) {
            list.remove(o);
        }
    }
    // 发布消息给所有观察者
    @Override
    public void notifyObserver() {
        for (Observer observer : list) {
            observer.update(message);
        }
    }
    // 新消息发布
    public void publish(String s) {
        this.message = s;
        System.out.println("微信服务更新消息: " + s);
        //消息更新,通知所有观察者
        notifyObserver();
    }
}

定义观察者接口

public interface Observer {
    void update(String message);
}

定义用户类User实现Observer

public class User implements Observer {
    private String name;

    public User(String name) {
        this.name = name;
    }

    @Override
    public void update(String message) {
        System.out.println(name + " 收到推送消息: " + message);
    }
}

测试类

public class Test {
    public static void main(String[] args) {
        // 创建发布者
        WeChatServer server = new WeChatServer();
        // 创建观察者
        Observer u1 = new User("张三");
        Observer u2 = new User("李四");
        Observer u3 = new User("王二麻子");
        // 注册观察者
        server.registerObserver(u1);
        server.registerObserver(u2);
        server.registerObserver(u3);
        // 发布信息
        server.publish("Java从入门到精通!");
        System.out.println("----------------------------------------------");
        // 移除观察者
        server.removeObserver(u1);
        // 发布信息
        server.publish("Java从入门到入土!");
    }
}

结果打印:


观察者模式总结

当一个对象的改变需要同时改变其它对象,并且它不知道具体要改变多个对象的时候,应该考虑使用观察者模式。

观察者模式所做的工作就是解除观察者与被观察者之间的耦合。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@从入门到入土

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值