设计模式——观察者模式

1. 简介

  观察者模式(Observer)是行为型模式的一种,它定义了对象之间一种一对多的依赖关系,当一个对象发生改变时,依赖它的所有对象会被通知并且自动更新,它符合对象之间松耦合的设计原则。

2. UML类图《设计模式——观察者模式》

  Subject也就是被观者拥有所有观察者的引用,提供一个注册观察者与删除观察者的方法以及通知所有观察者更新的方法。Observer是观察者接口,为所有观察者定义了一个方法,用于主题改变时更新自己。具体观察者各自实现Observer接口方法,可以及时得到通知并更新。

3. 实例

Observe接口:

public interface Observer {
    void update();
}

具体观察者:

public class ConcreteObserverA implements Observer {
    
    public void update() {
        System.out.println("观察者A更新成功!");
    }
}

public class ConcreteObserverB implements Observer {

    public void update() {
        System.out.println("观察者B更新成功!");
    }
}

public class ConcreteObserverC implements Observer {

    public void update() {
        System.out.println("观察者C更新成功!");
    }
}

Subject类:

public interface Subject {
    void registerObserver(Observer observer);
    void removeObserver(Observer observer);
    void notifyObserver(Observer observer);
}

具体Subject类:

public class ConcreteSubject implements Subject {

    private List<Observer> observers;
    
    public ConcreteSubject() {
        this.observers = new ArrayList<Observers>();
    }
    
    public void registerObserver(Observer observer) {
        this.observers.add(observers);
    }
    
    public void removeObserver(Observer observer) {
        if (!observers.isEmpty()) {
            observers.remove(observer);
        }
    }
    
    public void notifyObserver() {
        for (Observer observer : this.observers) {
            observer.update();
        }
    }
}

测试:

public class Test {

    public static void main(String[] args) {
        Subject subject = new ConcreteSubject();
        Observer observerA = new ConcreteObserverA();
        Observer observerB = new ConcreteObserverB();
        Observer observerC = new ConcreteObserverC();
        
        //注册观察者
        subject.registerObserver(observerA);
        subject.registerObserver(observerB);
        subject.registerObserver(observerC);
        
        //通知更新
        subject.notifyObserver();
        
        //删除观察者
        subject.removeObserver(observerC);
    
        //通知更新
        subject.notifyObserver();
    }
}
    原文作者:设计模式
    原文地址: https://segmentfault.com/a/1190000015632107
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞