`

设计模式(11)- 观察者模式

阅读更多

观察者模式

1.定义

       定义对象间的一种一对多的依赖关系。当一个对象的状态发生改变时,所有依赖与它的对象都能得到通知并被自动更新。

2.示例代码

  

/*目标对象,它知道观察它的观察者,提供注册和删除观察者的接口*/
public class Subject{
    /*用来保存注册的观察者对象*/
    private List<Observer> observers = new ArrayList<Observer>();
    /*注册观察者*/
    public void attach(Observer observer){
        observers.add(observer);
    }
    /*删除观察者*/
    pubic void detach(Observer observer){
        observers.remove(observer);
    }
    /*通知所有注册的观察者对象*/
    protected void notifyObservers(){
       for(Observer observer){
          observer.update(this);
       }
    }
}

/*具体目标对象的定义*/
public class ConceteSubject extends Subject{
   /*示意目标对象的状态*/
   private String subjectState;
   public String getSubjectState(){
       return subjectState;
   }
   public void setSubjectState(String subjectState){
       this.subjectState = subjectState;
       //目标对象发生了改变,通知观察者
       this.notifyObservers();
   }
}

   

/*观察者接口定义*/
public interface Observer{
   /*更新的接口,同步目标对象状态*/
   public void update(Subject subject);
}

/*具体观察者实现*/
public class ConcreteObserver implements Observer{
    /*示意观察者的状态*/
    private String observerState;
    public String getObserverState(){
       return observerState;
    }
    public void update(Subject subject){
        observerState = (ConcreteSubject)subject.getSubjectState();
    }
}

   

/*客户端调用示意*/
public class Client{
   public static void main(String args[]){
       //创建被观察者对象
       ConcreteSubject subject = new ConcreteSubject ();
       //创建观察者对象
       Observer observer1 = new ConcreteObserver();
       Observer observer2 = new ConcreteObserver();
       Observer observer3 = new ConcreteObserver();
       //注册观察者
       subject.attach(observer1);
       subject.attach(observer2);
       subject.attach(observer3);
       //改变被观察者状态       
       subject.setSubjectState("1");
       //取得被观察者状态
       System.out.println("observer1 = " + observer1.getObserverState()); 
       System.out.println("observer2 = " + observer2.getObserverState()); 
       System.out.println("observer3 = " + observer3.getObserverState()); 
   }
}

 

3.实际应用

     观察者模式实现了观察者和目标对象之间的抽象耦合,实现了动态联动,支持广播通信。

观察者模式的本质:触发联动
分享到:
评论

相关推荐

    设计模式--观察者模式java例子

    观察者模式(Observer Pattern)是软件设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式常用于事件驱动的系统或者...

    Android设计模式--观察者模式DEMO

    Android设计模式--观察者模式DEMO 观察者模式是一个使用频率非常高的模式,他最常用的地方是GUI系统和订阅-发布系统。 该模式的最重要的作用就是解耦,使观察者和被观察者之间依赖尽可能小,甚至好无依赖。

    C++设计模式--观察者模式 demo

    观察者模式(Observer Pattern)是软件设计模式中的一种行为模式,它在C++中的应用广泛且实用。这种模式的核心思想是“主体”(Subject)与“观察者”(Observer)之间的松耦合关系,允许一个对象(即主体)的状态...

    设计模式--观察者 c++版本

    观察者模式是一种行为设计模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。 观察者模式的核心思想是主体(Subject)与观察者(Observer)之间的...

    设计模式-观察者

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

    设计模式之观察者模式Java实现

    观察者模式(Observer Pattern)是软件设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式常用于事件驱动的系统或者...

    JAVA-设计模式-行为型模式-观察者模式

    JAVA-设计模式-行为型模式-观察者模式

    设计模式---观察者模式

    观察者模式是一种行为设计模式,它允许你定义一个订阅机制,可以及时地在对象之间传播状态变化。在Java中,观察者模式常用于构建事件驱动系统,使得多个对象能够监听并响应某个对象的状态改变。 首先,我们要理解...

    设计模式系列博客--观察者模式

    观察者模式(Observer Pattern)是设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并被自动更新。这种模式常用于实现事件驱动的系统或者...

    设计模式-观察者模式-作业-observer.zip

    观察者模式(Observer Pattern)是软件设计模式中的行为模式之一,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式常用于实现事件驱动或发布-...

    设计模式精解-GoF-23种设计模式解析--附C++源代码

    - 观察者模式(Observer):定义对象间的一种一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并被自动更新。 - 状态模式(State):允许对象在其内部状态改变时改变它的行为。 - ...

    跟我一起学 设计模式-观察者模式

    观察者模式,也称为发布-订阅模式或事件驱动模式,是一种行为设计模式,它定义了对象间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。 在C#、ASP.NET等.NET框架中,...

    设计模式课件大全

    PPT内容包括:内附代码,实例,方便理解。 继承、封装、多态、UML ...设计模式15-观察者模式、状态模式 设计模式16-策略模式、模板方法、访问者 此PPT实例便于理解,对于深入理解OO思想有很大帮助。

    HeadFirst 设计模式学习笔记2--观察者模式 demo

    观察者模式是设计模式中的一种行为模式,它在软件工程中扮演着重要的角色,尤其是在构建可扩展和可维护的系统时。HeadFirst的设计模式系列书籍以其直观易懂的方式深受程序员喜爱,本笔记将深入探讨观察者模式的概念...

    优秀的设计模式示例-观察者模式

    观察者模式,也被称为发布-订阅(Publish-Subscribe)模式,是软件设计中的一种行为模式。这个模式定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。在本文...

    设计模式-观察者模式(讲解及其实现代码)

    总结来说,观察者模式是一种重要的设计模式,它允许对象在状态改变时自动通知其他对象,从而降低了系统各部分之间的耦合度,提高了代码的灵活性和可扩展性。在实际项目中,正确使用观察者模式可以有效地管理组件间的...

    设计模式C++-观察者模式.doc

    观察者模式是一种软件设计模式,它允许对象在状态发生改变时通知其依赖的其他对象,以便这些对象可以相应地更新自身。这种模式是基于发布-订阅原则,即一个主题(Subject)可以拥有多个订阅者(Observer),当主题的...

    C++设计模式--基于Qt4开源跨平台开发框架

    《C++设计模式--基于Qt4开源跨平台开发框架》一书主要探讨了如何在C++编程中利用设计模式,并结合Qt4框架进行高效的跨平台应用开发。设计模式是软件工程中的重要概念,它们是经过时间和实践验证的解决特定问题的模板...

    Java 设计模式-观察者模式(Observer)

    结合微信公众号讲解观察者模式,生动形象,关键是上手快啊

Global site tag (gtag.js) - Google Analytics