阅读量:0
在Java中使用观察者模式,需要以下几个步骤:
定义观察者接口(Observer):该接口中定义了观察者需要实现的方法,通常包括update()方法,用于接收被观察者发送的通知。
定义被观察者接口(Subject):该接口中定义了被观察者需要实现的方法,通常包括注册观察者、移除观察者、通知观察者等方法。
实现观察者接口(具体观察者):针对具体的观察者对象,实现观察者接口中的方法,根据具体需求进行相应的操作。
实现被观察者接口(具体被观察者):针对具体的被观察者对象,实现被观察者接口中的方法,包括注册观察者、移除观察者、通知观察者等。
在被观察者中维护观察者列表:被观察者需要维护一个观察者列表,用于存储注册的观察者对象。
在被观察者的状态变化时通知观察者:当被观察者的状态发生变化时,需要遍历观察者列表,调用每个观察者的update()方法,将通知发送给观察者。
下面是一个简单的示例代码:
// 定义观察者接口 interface Observer { void update(String message); } // 定义被观察者接口 interface Subject { void registerObserver(Observer observer); void removeObserver(Observer observer); void notifyObservers(String message); } // 实现观察者接口 class ConcreteObserver implements Observer { private String name; public ConcreteObserver(String name) { this.name = name; } public void update(String message) { System.out.println(name + " received message: " + message); } } // 实现被观察者接口 class ConcreteSubject implements Subject { private List<Observer> observers = new ArrayList<>(); public void registerObserver(Observer observer) { observers.add(observer); } public void removeObserver(Observer observer) { observers.remove(observer); } public void notifyObservers(String message) { for (Observer observer : observers) { observer.update(message); } } } public class Main { public static void main(String[] args) { ConcreteSubject subject = new ConcreteSubject(); Observer observer1 = new ConcreteObserver("Observer1"); subject.registerObserver(observer1); Observer observer2 = new ConcreteObserver("Observer2"); subject.registerObserver(observer2); subject.notifyObservers("Hello, world!"); } }
运行上述代码,输出结果为:
Observer1 received message: Hello, world! Observer2 received message: Hello, world!
可以看到,当被观察者发送通知时,观察者接收到了相应的消息。