`

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

 
阅读更多

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

设计原则:

1.为交互对象之间的松耦合设计

 

注意:java本身自带了这种模式的接口。

 

 

具体实现如下:

 

 

/**
 *主题接口
 */
public interface Subject {
    void registerObserver(Observer observer);
    void removeObserver(Observer observer);
    void notifyObservers();
}

 

 

/**
 * 观察者接口
 */
public interface Observer {
    void update(String params);
}
/**
 * 具体主题的实现
 */
public class WeatherData implements Subject {
    private List<Observer> observers;
    private String params; //需要发布的数据

    public WeatherData() {
        this.observers = new ArrayList<Observer>();
    }

    @Override
    public void registerObserver(Observer observer) {
        if (observer != null) {
            this.observers.add(observer);
        }
    }

    @Override
    public void removeObserver(Observer observer) {
        int index = observers.indexOf(observer);
        if (index > 0) {
            observers.remove(index);
        }
    }

    /**
     * 通过此方法将数据发布给各订阅者
     * */
    @Override
    public void notifyObservers() {
        for(Observer observer: observers){
            observer.update(params);
        }
    }

    /**
     * 需要发布的数据状态有改变
     * */
    public void setChange(){
        notifyObservers();
    }

    public String getParams() {
        return params;
    }

    public void setParams(String params) {
        this.params = params;
        setChange();
    }
}

  

/**
 * 观察者实现
 */
public class CustomerObserver implements Observer {

    private String params;  //订阅的数据
    private Subject subject;

    public CustomerObserver(Subject subject) {
        this.subject = subject;
        this.subject.registerObserver(this); //此处维护订阅的关系
    }

    @Override
    public void update(String params) {
        this.params = params;
        System.out.println("display params:" + params);
    }
}

 

/**
 * 测试类
 */
public class TestObserver {
    public static void main(String[] args) {
        WeatherData subject = new WeatherData();
        Observer observer1 = new CustomerObserver(subject);
        Observer observer2 = new CustomerObserver(subject);
        subject.setParams("data1");
        subject.setParams("data2");
    }

}

 

 

 

通过java 自身的接口实现观察者模式

 

import java.util.Observable;

/**
 *继承java的类,不需要实现注册,和取消注册等方法,已经实现
 */
public class WeatherData extends Observable {

    private String params;     //需要发布的数据

    public void statuChange(){
        setChanged();   //注意此方法一定要调用,改变发布数据的状态
//        notifyObservers();  //java自身实现
        notifyObservers(new String("这个方法,将此对象发布到观察者对象中"));
    }


    public String getParams() {
        return params;
    }

    public void setParams(String params) {
        this.params = params;
        statuChange();      //状态改变
    }

    @Override
    public String toString() {
        return "WeatherData{" +
                "params='" + params + '\'' +
                '}';
    }
}

 

 

import java.util.Observable;
import java.util.Observer;

/**
 * 观察者
 */
public class CustomerObserver   implements Observer {

    private Observable observable;

    public CustomerObserver(Observable observable) {
        this.observable = observable;
        this.observable.addObserver(this);
    }

    @Override
    public void update(Observable o, Object arg) {
        if(o instanceof WeatherData){
            //此处获取发布的数据
            System.out.println(o);
        }
        if(arg!=null){  //这个对象是发布方法传过来的
            System.out.println("--------------" +arg);
        }
    }
}

 

 

/**
 * Created by Administrator on 2017/11/18.
 */
public class TestJavaObserver {
    public static void main(String[] args) {
        WeatherData weatherData = new WeatherData();
        CustomerObserver customerObserver = new CustomerObserver(weatherData);
        weatherData.setParams("参数");
    }
}

 

 

0
0
分享到:
评论

相关推荐

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    设计模式-观察者

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

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

    ### 设计模式精解——GoF 23种设计模式解析及C++实现源码 #### 引言 设计模式是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。GoF(Gang of Four)所提出的23种设计模式,被认为是面向对象...

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

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

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

    观察者模式是一种行为设计模式,它允许你定义一个订阅机制,可以在对象事件发生时通知多个“观察”该对象的其他对象。这个模式的核心在于建立一种一对多的关系,当一个对象的状态改变时,所有依赖于它的对象都会得到...

    设计模式实现——观察者模式

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

    新版设计模式手册 - C#设计模式(第二版)

    《新版设计模式手册 - C#设计模式(第二版)》是一部深入探讨C#编程中设计模式的权威指南,尤其适合已经有一定C#基础并希望提升软件设计能力的开发者阅读。设计模式是解决软件开发中常见问题的经验总结,是软件工程的...

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

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

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

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

    设计模式课件大全

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

    设计模式专题之(十八)观察者模式---设计模式观察者模式示例代码(python--c++)

    观察者模式是软件设计模式中的一种行为模式,它允许一个对象,称为"主题",维护一个依赖于它的对象列表,这些对象被称为"观察者"。当主题的状态发生改变时,它会通知所有观察者,使它们能够自动更新自己。这种模式在...

    java设计模式---诙谐易懂版

    代理模式(Proxy Pattern)、单例模式(Singleton Pattern)、工厂方法模式(...观察者模式(Observer Pattern)、责任链模式(Chain of Responsibility Pattern)、访问者模式(Visitor Pattern)、状态模式(State ...

Global site tag (gtag.js) - Google Analytics