在Java中实现观察者模式,需要定义两个角色:观察者(Observer)和被观察者(Subject)。观察者可以注册到被观察者,当被观察者状态发生变化时,观察者会收到通知并进行相应的处理。
以下是一个简单的示例代码,演示如何实现观察者模式:
import java.util.ArrayList; import java.util.List; // 观察者接口 interface Observer { void update(String message); } // 被观察者接口 interface Subject { void registerObserver(Observer observer); void removeObserver(Observer observer); void notifyObservers(); } // 具体的观察者类 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); } } // 具体的被观察者类 class ConcreteSubject implements Subject { private Listobservers = new ArrayList<>(); private String message; @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(message); } } public void setMessage(String message) { this.message = message; notifyObservers(); } } public class Main { public static void main(String[] args) { ConcreteObserver observer1 = new ConcreteObserver("Observer 1"); ConcreteObserver observer2 = new ConcreteObserver("Observer 2"); ConcreteSubject subject = new ConcreteSubject(); subject.registerObserver(observer1); subject.registerObserver(observer2); subject.setMessage("Hello World!"); } }
在上述代码中,ConcreteObserver
实现了Observer
接口,并实现了update
方法,用于接收被观察者的消息。ConcreteSubject
实现了Subject
接口,实现了注册观察者、移除观察者和通知观察者的方法。被观察者状态发生变化时,调用notifyObservers
方法通知所有观察者。
在Main
类中,创建了两个观察者observer1
和observer2
,以及一个被观察者subject
。将观察者注册到被观察者后,调用setMessage
方法改变被观察者的状态,观察者将收到相应的通知并输出消息。
以上就是一个简单实现观察者模式的示例代码,你可以根据自己的需求进行修改和扩展。