美文网首页
JAVA设计模式-观察者模式

JAVA设计模式-观察者模式

作者: 凡星轨迹 | 来源:发表于2016-10-08 16:38 被阅读0次

观察者模式是非常常用的一种设计模式。在软件系统中,当一个对象的行为依赖于另一个对象的状态时,观察者模式就相当有用。若不适用观察者模式提供的通用结构,而需要实现其类似的功能,则只能在另一个线程中不停监控对象一来的状态。在一个复杂的系统中,可能会因此开启很多线程来实现这一个功能,这将使系统的性能产生额外的负担。观察者模式的意义也就在此,它可以在单线程中,使某一对象,及时得知自身所依赖的状态的变化。
观察者模式角色如下:

1.主题接口:指被观察的对象。当其状态发生改变或者某件事发生时,它会将这个变化通知观察者。它维护了观察者所需要依赖的状态。
2.具体主题:具体主题实现了主题接口中的方法。如新增观察者、删除观察者和通知观察者。其内部维护一个观察者列表。
3.观察者接口:观察者接口定义了观察者的基本方法。当依赖状态发生改变时,主题接口就会调用观察者的update()方法。
4.具体观察者:实现了观察者接口的update()方法,具体处理当被观察者状态改变或者某一件事情发生时的业务逻辑。

下面我们就用具体的代码来实现一个观察者模式:
主题接口的实现如下:

public interface ISubject{

  void attach(IObserver observer);
  void detach(IObserver observer);
  void inform();
}

观察者接口实现如下:

public interface IObserver{
  void update(Event evt);
}

一个具体的主题实现,注意,它维护了观察者队列,提供了增加和删除观察者的方法并通过inform()通知观察者。

public class ConcreteSubject implements ISubject{
    Vector<IObserver> observers = new Vector<IObserver>();
     
      public void attach(IObserver observer){
          observers.addElement(observer);
      }
      public void detach(IObserver observer){
          observers.removeElement(observer);
      }
      public void inform(){
          Event event = new Event();
          for(IObserver ob:observers){
              ob.update(event);
          }
      }
}

一个具体的观察者实现如下,当其监听的状态发生改变时,update()方法就会被主题回调,进而可以在观察者内部进行业务逻辑的处理。

public class ConcreteObserver implements IObserver{
       public void update(Event evt){
            System.out.println("observer receives information");
       }
}

观察者模式如此常用,以致于JDK内部就已经为我们准备了一套观察者模式实现。它位于java.util包中,包括java.util.Observable类和java.util.Observer接口。
在java.util.observable类中,已经实现了主要功能,如增加观察者、删除观察者和通知观察者,我们可以直接通过继承Observable使用这些功能。java.util.Observer接口是观察者接口,它的update()方法会在java.util.Observabel的notifyObservers()方法中被回调,以获得最新的状态变化。通常在观察者模式中Observer接口总是应用程序的核心扩展对象。具体的业务逻辑总是会被封装在update()方法中。

相关文章

  • 观察者设计模式

    每周学点Java设计模式__观察者设计模式 本次继续更新java23中设计模式之一——观察者模式。 观察者模式(有...

  • Android中涉及的模式

    我的Java设计模式-建造者模式 我的Java设计模式-观察者模式 重学设计模式之单例模式

  • java建造者模式

    其他设计模式java单例模式java建造者模式java策略模式java代理模式java观察者模式java适配器模式...

  • java单例模式

    其他设计模式java单例模式java建造者模式java策略模式java代理模式java观察者模式java适配器模式...

  • java外观模式

    其他设计模式java单例模式java建造者模式java策略模式java代理模式java观察者模式java适配器模式...

  • java适配器模式

    其他设计模式java单例模式java建造者模式java策略模式java代理模式java观察者模式java适配器模式...

  • java观察者模式

    其他设计模式java单例模式java建造者模式java策略模式java代理模式java观察者模式java适配器模式...

  • java代理模式

    其他设计模式java单例模式java建造者模式java策略模式java代理模式java观察者模式java适配器模式...

  • java策略模式

    其他设计模式java单例模式java建造者模式java策略模式java代理模式java观察者模式java适配器模式...

  • 浅析Java设计模式【1】——观察者

    前情内容 浅析Java设计模式【1】——观察者 浅析Java设计模式【2】——适配器 浅析Java设计模式【3】—...

网友评论

      本文标题:JAVA设计模式-观察者模式

      本文链接:https://www.haomeiwen.com/subject/xwrqyttx.html