【每日一记】设计模式——观察者模式

概述

  • 描述:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新
  • 试用场景:
    1. 对一个对象状态的更新,需要其他对象同步更新,而且其他对象的数量动态可变
    2. 对象仅需要将自己的更新通知给其他对象而不需要知道其他对象的细节

实现

// 主题类
public abstract class Subject {
    List<Observer> observers = new ArrayList<>();

    public void addObserver(Observer observer) {
        observers.add(observer);
    }

    public void removeobservers(Observer observer) {
        observers.remove(observer);
    }

    public void notifyObservers(String state) {
        for (Observer observer : observers) {
            observer.update(state);
        }
    }
}

class ConcreteSubject extends Subject {
    private String state;

    public ConcreteSubject(String state) {
        this.state = state;
    }

    public void change(String state) {
        this.state = state;
        System.out.println("change state: " + this.state);
        notifyObservers(state);
    }
}
// 观察者类
public interface Observer {
    void update(String state);
}

class ConcreteObserver implements Observer {
    private String state;

    @Override
    public void update(String state) {
        this.state = state;
        System.out.println(this + " update state: " + this.state);
    }
}
// 客户端
public class Client {
    public static void main(String[] args) throws Exception {
        ConcreteSubject s = new ConcreteSubject("hello");
        Observer ob1 = new ConcreteObserver();
        Observer ob2 = new ConcreteObserver();
        s.addObserver(ob1);
        s.addObserver(ob2);
        s.change("world");
    }
}

通过观察者模式,松散了观察者和被观察者之间的耦合,轻松的将一个对象的变化通知给多个对象。另外JDK中提供了Observable类,观察者类只需实现java.util.Observer接口即可使用观察者模式

实际应用

java事件监听,java.util.EventListener
事件监听管理类相当于主题类,它持有一个事件监听器列表,当某一事件发生时通知其列表中的所有监听器
事件监听器相当于观察者类,根据主题类状态的改变执行某些动作

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值