实例解析观察者模式及其在实例解析观察者模式及其在Java设计模式开发中的运用设计模式开发中的运用
观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象,这个主题对象在状态上发生变化时,会通知所有观察者对象,使它们能够自动更新自己.下面就
以实例解析观察者模式及其在Java设计模式开发中的运用
一、观察者模式(一、观察者模式(Observer)的定义:)的定义:
观察者模式又称为订阅—发布模式,在此模式中,一个目标对象管理所有相依于它的观察者对象,并且在它本身的状态改变时主动发出通知。这通常透过呼叫各观察者所提供的方法来实现。此种模式通
常被用来事件处理系统。
1、观察者模式的一般结构、观察者模式的一般结构
首先看下观察者模式的类图描述:
观察者模式的角色如下:
Subject(抽象主题接口):定义了主题类中对观察者列表的一系列操作, 包括增加,删除, 通知等。
Concrete Subject(具体主题类):
Observer(抽象观察者接口):定义了观察者对主题类更新状态接受操作。
ConcreteObserver(具体观察者类):实现观察者接口更新主题类通知等逻辑。
从这个类图可以看出, 主题类中维护了一个实现观察者接口的类列表, 主题类通过这个列表来对观察者进行一系列的增删改操作。观察者类也可以主动调用update方法来了解获取主题类的状态更新信
息。
以上的类图所描述的只是基本的观察者模式的思想, 有很多不足。比如作为观察者也可以主动订阅某类主题等。下面的例子将进行一些改动, 以便适用具体的业务逻辑。
2、观察者模式示例、观察者模式示例
我们构建一个观察者和主题类, 观察者可以主动订阅主题或者取消主题。主题类统一被一个主题管理者所管理。下面给出类图:
Subject:
public interface Subject {
//注册一个observer
public void register(Observer observer);
//移除一个observer
public void remove(Observer observer);
//通知所有观察者
public void notifyObservers();
//获取主题类要发布的消息
public String getMessage();
}
ConcerteSubject:
public class MySubject implements Subject {
private List<Observer> observers;
private boolean changed;
private String message;
//对象锁, 用于同步更新观察者列表