观察者模式的基本定义是什么?

观察者模式(Observer Pattern)是一种设计模式,它定义了对象之间的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种类型的设计模式属于行为型模式。

在观察者模式中,通常会有两类角色:

  1. 主题(Subject):也被称为被观察者,它有一个观察者列表,用于存放所有依赖于主题的观察者对象。当主题的状态发生改变时,它会通知列表中的所有观察者对象。

  2. 观察者(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方法都会被调用。

发表评论

后才能评论