设计模式之--观察者模式(Observer Pattern)(22)


定义:观察者模式,也叫发布订阅模式

            定义对象间一种一对多的依赖关系,使得每 当一个对象改变状态,则所有依赖于它的对象都会得到通知并被自动更新

Sbuject被观察者职责:管理观察者并通知观察者。

Observer观察者职责:对接受的信息进行处理。

ConcreteSubject具体的被观察者:定义本身业务逻辑。

ConcreteObserver具体的观察者:定义本身处理逻辑。


通用类图如下:



代码:

public abstract class Subject{
    
    // 定义一个观察者组
    private Vector<Observer> obsVector = new Vector<Observer>();
    // 增加一个观察者
    public void addObserver(Observer o){
        this.obsVector.add(o);
    }

    // 删除一个观察者
    public void delObserver(Observer o){
        this.obsVector.remove(o);
    }

    // 通知所有观察者
    public void notifyObservers(){
        for(Observer o:this.obsVector){
            o.update();
        }
    }

}

public class ConcreteSubject extends Subject{

    // 具体业务
    public void doSomething(){
        /** do something */
        super.notifyObservers();
    }
}

public interface Observer{

    // 更新方法
    public void update();
}

public class ConcreteObserver implements Observer{

    // 实现更新方法
    public void update(){
         System.out.println("接收到信息,并进行处理");
    }
}

public class Client{

    public static void main(String[] args){
        // 创建一个被观察者
        Subject subject = new ConcreteSubject();
        // 定义一个观察者
        Observer obs = new ConcreteObserver();
        // 观察者观察被观察者
        subject.addObserver(obs);
        // 观察者开始活动了
        subject.doSomething();
    }
}

观察者模式的优点

    1)观察者和被观察者之间是抽象耦合

         不管是增加观察者还是被观察者都非常容易扩展,而且在Java中都已经实现的抽象层级的定义,在系统扩展方面更是得心应手。

    2)建立一套触发机制

         可以完美的实现这里的链条形式


观察者模式的缺点

    1)需考虑开发效率和运行效率,1:n的模式开发调试比较复杂,Java消息的通知默认是顺序执行,假如一个观察者卡壳,会影响整体的执行效率,

         一旦出现此情况,一般采用异步的方式。

         多级触发的效率也很低


观察者模式的使用场景:

    1)关联行为场景。(关联行为是可拆分,非组合关系)

    2)事件多级触发场景

    3)跨系统的消息交换场景,如消息队列的处理机制。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值