设计模式之观察者模式

设计模式之观察者模式

1. 概括

观察者模式是一种发布订阅机制,当发布者自身状态改变后后,会通知一个或多个订阅者

2. 结构

  • 抽象订阅者:订阅者的抽象,至少定义一个update方法,用于接收通知
  • 具体抽象者:实现接口并重写方法
  • 发布者:定义一个用于存储订阅者的成员属性、几个用于添加或删除订阅者的方法,

无论发生了什么样的事件,发布者都要通知订阅者,(调用订阅者的方法)

3. 使用场景

  • 当对象的状态的改变需要影响其它的对象时
  • 当一方对象需要观察其它的对象时

4. 实现

  • 商店用例:当商店添加物品后,通知订阅者
  • 抽象订阅者
public interface Subscriber {
    void update(String message);
}
  • 具体订阅者
public class User implements Subscriber{

    private String name;

    public User() {
    }

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

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public void update(String message) {
        System.out.println(this.name + "收到通知:" + message);
    }
}
  • 发布者
public class Shop {
	// 订阅列表
    List<Subscriber> subs = new ArrayList<>();

    // 添加订阅者
    public Shop addSub(Subscriber subscriber) {
        subs.add(subscriber);
        return this;
    }
    // 发布
    public void addGoods() {
    	// 通知【第一个】订阅者
        for (Subscriber sub : subs) {
            sub.update("商品更新");
        }
    }
}
  • 调用
public class Client {
    public static void main(String[] args) {
        Subscriber user1 = new User("zhangsan"); // 创建订阅者
        Subscriber user2 = new User("lisi");
        Subscriber user3 = new User("wangwu"); // 没有收到通知,因为没有加到订阅列表中
        Shop shop = new Shop(); // 创建发布者
        shop.addSub(user1).addSub(user2); // 订阅者添加订阅

        shop.addGoods(); // 发布商品,会自动通知订阅者
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值