Observer Patterns —— Behavorial Class

发布时间 2023-08-30 19:03:51作者: Mysticbinary

Oberver Define

Observer Patterns 定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并被自动更新。

Key elements

  • 主题(Subject)interface
  • 主题(Subject)
  • 订阅者(Subscriber)interface
  • 订阅者(Subscriber)
  • Client

Example

interface

// 定义主题接口  
public interface Subject {  
    void registerObserver(Observer observer);  
    void removeObserver(Observer observer);  
    void notifyObservers();  
}  
  
// 定义订阅者接口  
public interface Observer {  
    void update(String message);  
}  

Concrete

// 实现主题类  
public class ConcreteSubject implements Subject {  
    private List<Observer> observers;  
    private String state;  
  
    public ConcreteSubject() {  
        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 observer : observers) {  
            observer.update(state);  
        }  
    }  
  
    public void setState(String state) {  
        this.state = state;  
        notifyObservers();  
    }  
}  
  
// 实现订阅者类  
public class ConcreteObserver implements Observer {  
    private String name;  
  
    public ConcreteObserver(String name) {  
        this.name = name;  
    }  
  
    @Override  
    public void update(String message) {  
        System.out.println(name + " received message: " + message);  
    }  
}

client

public static void main(String[] args) {  
    ConcreteSubject subject = new ConcreteSubject();  
    ConcreteObserver observer1 = new ConcreteObserver("Observer 1");  
    ConcreteObserver observer2 = new ConcreteObserver("Observer 2");  
    subject.registerObserver(observer1);  
    subject.registerObserver(observer2);  
    subject.setState("Hello World!"); 
    // 输出:Observer 1 received message: Hello World!
    //      Observer 2 received message: Hello World!  
}

我们创建了一个具体的主题ConcreteSubject和一个具体的订阅者ConcreteObserver。
然后我们创建了两个订阅者并注册到主题。当状态改变时,主题会通知所有注册的订阅者。