【行为型模式】Java设计模式之:观察者模式

观察者模式(Observer Pattern)是一种行为型设计模式,它定义了对象之间的一种一对多的依赖关系,使得每当一个对象状态发生改变时,其所有依赖者都会得到通知并自动更新。观察者模式也被称为发布-订阅(Publish/Subscribe)模式。

观察者模式中通常包含以下角色:文章源自新逸网络-https://www.xinac.net/9367.html

1. 抽象主题(Subject):定义了观察者需要关注的事件,和添加、删除和通知观察者的方法。文章源自新逸网络-https://www.xinac.net/9367.html

2. 具体主题(Concrete Subject):实现了抽象主题接口,负责维护观察者列表,并通知观察者。文章源自新逸网络-https://www.xinac.net/9367.html

3. 抽象观察者(Observer):定义了观察者接口,包含了接收通知和更新状态的方法。文章源自新逸网络-https://www.xinac.net/9367.html

4. 具体观察者(Concrete Observer):实现了抽象观察者接口,用于具体实现观察者的操作。文章源自新逸网络-https://www.xinac.net/9367.html

下面是一个简单的 Java 实现观察者模式的示例:文章源自新逸网络-https://www.xinac.net/9367.html

// 抽象主题
interface Subject {
    void attach(Observer observer);
    void detach(Observer observer);
    void notifyObservers(String message);
}

// 具体主题
class ConcreteSubject implements Subject {
    private List<Observer> observers = new ArrayList<>();

    public void attach(Observer observer) {
        observers.add(observer);
    }

    public void detach(Observer observer) {
        observers.remove(observer);
    }

    public void notifyObservers(String message) {
        for (Observer observer : observers) {
            observer.update(message);
        }
    }
}

// 抽象观察者
interface Observer {
    void update(String message);
}

// 具体观察者
class ConcreteObserver1 implements Observer {
    public void update(String message) {
        System.out.println("观察者1收到消息:" + message);
    }
}

class ConcreteObserver2 implements Observer {
    public void update(String message) {
        System.out.println("观察者2收到消息:" + message);
    }
}

// 客户端
public class Client {
    public static void main(String[] args) {
        Subject subject = new ConcreteSubject();
        Observer observer1 = new ConcreteObserver1();
        Observer observer2 = new ConcreteObserver2();

        subject.attach(observer1);
        subject.attach(observer2);

        subject.notifyObservers("这是一条消息");
    }
}

在上面的示例中,抽象主题接口定义了观察者需要关注的事件,和添加、删除和通知观察者的方法。具体主题类实现了抽象主题接口,并且负责维护观察者列表,并通知观察者。抽象观察者接口定义了观察者接口,包含了接收通知和更新状态的方法。具体观察者类实现了抽象观察者接口,用于具体实现观察者的操作。文章源自新逸网络-https://www.xinac.net/9367.html

观察者模式的优点是可以将观察者和主题对象解耦,从而提高系统的灵活性和可扩展性。同时,观察者模式可以实现动态联动,当一个对象发生改变时,其所有依赖者都会得到通知并自动更新。但是需要注意的是,由于观察者模式需要维护观察者列表,因此可能会增加系统的复杂度和内存消耗。文章源自新逸网络-https://www.xinac.net/9367.html 文章源自新逸网络-https://www.xinac.net/9367.html

weinxin
新逸IT技术
扫一扫关注微信公众号
Admin
  • 本文由 发表于 2023-09-01
  • 转载请注明:https://www.xinac.net/9367.html
评论  0  访客  0
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定