观察者模式的基本定义是什么?
观察者模式(Observer Pattern)是一种设计模式,它定义了对象之间的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种类型的设计模式属于行为型模式。
在观察者模式中,通常会有两类角色:
- 主题(Subject):也被称为被观察者,它有一个观察者列表,用于存放所有依赖于主题的观察者对象。当主题的状态发生改变时,它会通知列表中的所有观察者对象。
-
观察者(Observer):它定义了一个更新接口,当它关注的主题状态发生改变时,它的
update()
方法会被调用。
观察者模式在实际使用中非常常见,例如在GUI编程中,可能会有多个视图组件需要响应某个数据的变化,这时就可以使用观察者模式。另一个常见的例子是模型-视图-控制器(MVC)架构,其中的模型(Model)就是一个主题,视图(View)是观察者,当模型中的数据发生改变时,视图会自动更新。
以下是一个简单的Java实现:
import java.util.ArrayList;
import java.util.List;
// Subject
class Subject {
private List<Observer> observers = new ArrayList<Observer>();
public void attach(Observer observer){
observers.add(observer);
}
public void notifyAllObservers(){
for (Observer observer : observers) {
observer.update();
}
}
}
// Observer
interface Observer {
void update();
}
// Concrete Observers
class HexObserver extends Observer {
public void update() {
System.out.println("Hex Observer notified");
}
}
class BinaryObserver extends Observer {
public void update() {
System.out.println("Binary Observer notified");
}
}
// Usage
public class Main {
public static void main(String[] args) {
Subject subject = new Subject();
new HexObserver().attach(subject);
new BinaryObserver().attach(subject);
System.out.println("First state change: 15");
subject.notifyAllObservers();
System.out.println("Second state change: 10");
subject.notifyAllObservers();
}
}
在这个例子中,Subject
类有一个观察者列表,当它的状态发生改变时(在这个例子中是通过调用notifyAllObservers
方法模拟的),所有依赖于它的观察者对象的update
方法都会被调用。