观察者模式主要是为了松耦合,通俗的讲是发布订阅,适用于消息通知的场景。

1、定义

  观察者模式定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。

2、UML

     

3、案例

定义主题接口:

package ilan.Observer;

public interface Subject {
    void registerObserver(Observer observer);

    void removeObserver(Observer observer);

    void notifyObservers();
}

定义主题实现类:

package ilan.Observer;

import java.util.ArrayList;
import java.util.List;

public class ConcreteSubject implements Subject {
    private List<Observer> observers = new ArrayList<>();

    @Override
    public void registerObserver(Observer observer) {
        observers.add(observer);
    }

    @Override
    public void removeObserver(Observer observer) {
        observers.remove(observer);
    }

    @Override
    public void notifyObservers() {
        for (Observer o : observers) {
            o.update("消息通知");
        }
    }
}

 

定义观察者接口:

package ilan.Observer;

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

定义观察者实现类:

package ilan.Observer;

public class ConcreteObserver1 implements Observer {
    @Override
    public void update(String message) {
        System.out.println("观察者1接收到" + message);
    }
}
package ilan.Observer;

public class ConcreteObserver2 implements Observer {
    @Override
    public void update(String message) {
        System.out.println("观察者2接收到" + message);
    }
}

 

编写测试程序:

package ilan.Observer;

public class MainClass {
    public static void main(String[] args) {
        Subject subject = new ConcreteSubject();
        Observer c1 = new ConcreteObserver1();
        Observer c2 = new ConcreteObserver2();
        subject.registerObserver(c1);
        subject.registerObserver(c2);

        subject.notifyObservers();
    }
}

测试结果:

观察者1接收到消息通知
观察者2接收到消息通知

 

版权声明:本文为sgx2019原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/sgx2019/p/11300086.html