设计模式(8)观察者模式-行为型

本文详细介绍了观察者模式,包括定义、角色解析、类图展示及应用示例。观察者模式定义了一对多的依赖关系,当主题状态改变时,所有依赖者将自动更新。抽象主题ISubject负责保存观察者并管理注册和取消注册,ConcreteSubject实现具体操作。抽象观察者IObserver规定了更新方法,ConcreteObserver则实现这些方法。通过该模式,可实现观察者与被观察者之间的松耦合。

定义

定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。

角色

抽象主题(ISubject)

定义主题中的要实现的方法,包括保存所有的观察者,观察者注册,取消注册(增删)等。

主题类(ConcreteSubject)

实现了抽象主题中的具体方法。

抽象观察者(IObserver)

定义观察者要实现的方法,比如:更新,修改,回滚,显示等方法。

观察者类(ConcreteObserver)

实现抽象观察者中的具体方法。

类图

示例

观察者模式算是比较好理解的一种模式。简单示例如下:

public interface  ISubject{
void addObserver(IObserver obs);
void delObserver(IObserver obs);
void removerAll();
void notifyAll();
public class Subject implements ISubject{
List<IObserver> observerList = new ArraryList<IObserver>(); 
private int count;
void addObserver(IObserver obs)
{
   observerList .add(obs);
}
void delObserver(IObserver obs)
{
    observerList .remover(obs);
}
void removerAll()
{
    observerList.clear();
}
public void notifyAll()
{
    for(IObserver obs:allObserver)
    {
       obs.update(count);
       obs.display(count);
    }
}

public void setChange(int count)
{
    this.count = count;
    notifyAll();
}
public interface IObserver()
{
    boolean update(int count);
    boolean display(int count);
}
public class Observer implements IObserver
{
    private Subject subject = null;
    public Observer(Subject sub)
    {
        this.subject = sub;
        subject.addObserver(this);
    }
    private IDataDao dataDao = new DataDao();
    public boolean update(int count)
    {
        dataDao.update(count); //假设更新数据库
    }
    public boolean display(int count)
    {
        System.out.println("display " + count);
    }
}
public class Test {
    public static void main(String[] args){
        Subject subject = new Subject();
        Observer observer = new Observer(subject);
        int count = 20;
        subject.setChange(count);
        int count2 = 30;
        subject.setChange(count2);
    }
}

要点

1.定义了对象之间一对多的关系
2.观察者和可观察者之间用松耦合方式结合,可观察者不知道观察者的细节,只知道观察者实现了接口中的方法
3.有多个观察者时,不可以依赖特定的统治次序

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值