设计模式-观察者模式

观察者模式

定义:观察者模式(发布-订阅模式),指多个对象之间存在一对多的依赖关系,当一个对象的状态发生改变时,所有依赖它的对象都得到通知并被自动更新。

使用场景:

  • 一个对象的改变会导致其他一个或多个对象的改变
  • 一个对象必须通知其他对象

结构:

  • 抽象主题(Subject):抽象目标类,它提供了一个用于保存观察者对象的聚集类和增加、删除观察者对象的方法,以及通知所有观察者的抽象方法。
  • 具体主题(Concrete Subject):具体目标类,它实现抽象目标中的通知方法,当具体主题的内部状态发生改变时,通知所有注册过的观察者对象。
  • 抽象观察者(Observer)角色:它是一个抽象类或接口,它包含了一个更新自己的抽象方法,当接到具体主题的更改通知时被调用。
  • 具体观察者(Concrete Observer):实现抽象观察者中定义的抽象方法,以便在得到目标的更改通知时更新自身的状态。

注意:Java已经实现了观察者模式

我们利用Java实现的接口,做如下一个例子,我有两个同学,我的手机号修改了,通知到同学去修改。

例子:

public class MyInfo extends Observable {

    private String telNum;

    public String getTelNum() {
        return telNum;
    }

    public void setTelNum(String telNum) {
        this.telNum = telNum;
    }

    public void updateTelNum(String telNum){
        super.setChanged();
        super.notifyObservers(telNum);
        this.telNum=telNum;
    }
}
public class Studen1 implements Observer {

    @Override
    public void update(Observable o, Object arg) {
        System.out.println("学生1收到了修改信息,改为"+arg);
    }
}
public class Studen2 implements Observer {

    @Override
    public void update(Observable o, Object arg) {
        System.out.println("学生2收到了修改信息,改为"+arg);
    }
}

测试代码:


    public static void main(String[] args) throws InterruptedException, CloneNotSupportedException {
        Observable observable=new MyInfo();
        observable.addObserver(new Studen1());
        observable.addObserver(new Studen2());

        ((MyInfo) observable).updateTelNum("12345678");

    }

返回目录

书山有路勤为径,学海无涯苦作舟
原文地址:https://www.cnblogs.com/javammc/p/14961422.html