观察者设计模式java

阅读 73

2023-07-20

观察者设计模式

观察者设计模式是一种行为型设计模式,用于在对象之间建立一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会被通知并自动更新。在Java中,我们可以使用观察者设计模式来实现事件驱动的编程。

流程

下面是实现观察者设计模式的一般步骤:

步骤 描述
1. 定义观察者接口 创建一个观察者接口,定义观察者对象应该具有的方法。
2. 实现观察者接口 创建一个或多个实现观察者接口的类,实现观察者的方法。
3. 定义被观察者接口 创建一个被观察者接口,定义被观察者对象应该具有的方法。
4. 实现被观察者接口 创建一个实现被观察者接口的类,实现被观察者的方法。
5. 注册观察者 在被观察者对象中维护一个观察者列表,并提供方法用于注册和注销观察者。
6. 通知观察者 当被观察者的状态发生改变时,通知所有注册的观察者。
7. 使用观察者模式 在其他类中使用观察者模式,创建观察者和被观察者对象,并将观察者注册到被观察者中。

代码实现

步骤1:定义观察者接口

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

在上面的代码中,我们定义了一个Observer接口,它包含一个update方法,用于接收被观察者发送的消息。

步骤2:实现观察者接口

public class User implements Observer {
    private String name;
    
    public User(String name) {
        this.name = name;
    }
    
    @Override
    public void update(String message) {
        System.out.println(name + " received a message: " + message);
    }
}

上面的代码中,我们创建了一个User类,实现了Observer接口,通过实现update方法来处理接收到的消息。

步骤3:定义被观察者接口

public interface Subject {
    void registerObserver(Observer observer);
    void removeObserver(Observer observer);
    void notifyObservers(String message);
}

在上面的代码中,我们定义了一个Subject接口,它包含了注册观察者、注销观察者和通知观察者的方法。

步骤4:实现被观察者接口

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

public class NewsAgency 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(String message) {
        for (Observer observer : observers) {
            observer.update(message);
        }
    }
    
    public void publishNews(String news) {
        notifyObservers(news);
    }
}

在上面的代码中,我们创建了一个NewsAgency类,实现了Subject接口,通过维护一个观察者列表来管理观察者的注册和注销,并在状态发生改变时通知所有观察者。

步骤5:注册观察者

NewsAgency newsAgency = new NewsAgency();

Observer user1 = new User("User 1");
Observer user2 = new User("User 2");

newsAgency.registerObserver(user1);
newsAgency.registerObserver(user2);

在上面的代码中,我们创建了一个NewsAgency对象,并创建了两个User对象作为观察者。然后,我们将观察者注册到被观察者中。

步骤6:通知观察者

精彩评论(0)

0 0 举报