设计模式--观察者模式

观察者模式

该模式下被观察者和观察者对象形成一对多的关系,当被观察者发生改变时,所有的观察者都会接收到通知。

1. 使用场景

当一个对象的改变需要通知给其他对象,而又不知道其他对象是谁、有多少。

2. 角色

  • Subject 抽象主题,被观察者(Observable),使用集合存储所有抽象观察者,并提供增加删除观察者的方法。
  • ConcreteSubject 具体主题,具体被观察者,实现了给具体观察者通知状态改变的逻辑。
  • Observer 抽象观察者,定义了在得到通知后进行更新的接口方法。
  • ConcreteObserver 具体观察者,实现了具体的更新逻辑。

3. 实践

// 抽象主题,此处使用java.util包中的Observable类作为抽象被观察者
// 该类使用Vector<Observer>存储被观察者,使用boolean changed 记录状态是否改变

// 具体被观察者
public class DevTechFrontier extends Observable {
    public void postNewPublication(String content) {
        // 标识状态或者内容发生改变,修改changed为true
        setChanged();
        // 通知所有观察者,遍历观察者集合,依次调用update方法,并将结果传入
        notifyObservers(content);
    }
}

// 抽象被观察者,使用java.util中的Observer接口,传入被观察者及返回结果。

// 具体观察者,实现Observer接口
public class Coder implements Observer {
    public String name;

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

    @Override
    public void update(Observable o, Object arg) {
        System.out.println("Hi, " + name + ", DevTechFrontier 跟新啦, 内容:" + arg);
    }

    @Override
    public String toString() {
        return "码农: " + name;
    }
}

4. 总结

主要作用就是解耦,提高了系统的灵活性和可扩展性,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值