Java观察者模式

观察者模式,是一种对象的行为模式,其定义了对象之间的一对多的关系,能够使得某一对象的状态或属性改变的时候该对象所对应的多个对象能够自动更新。这个对象就叫被观察者,它所对应的其他对象叫观察者。其主要作用是能够解耦,并且能够保证观察者们这些低耦合对象间的行为协调一致。那么观察者模式到底是怎么回事呢,下面用代码说明。
1.被观察者,对象一对多关系中“一”的那方,多个观察者“观察”该对象的同一或不同属性,该对象的被观察的属性改变后通知观察者做出对应的操作

/**
 * 被观察者
 */
class Tartget{
//被观察的属性
    private int status;
//观察者集合
    private List<IObserver> observers = new ArrayList<>();

    public int getStatus() {
        return status;
    }

    public void setStatus(int status) {
        this.status = status;
        notifyObservers();
    }
//为该对象添加一个观察者
    public void attach(IObserver observer){
        observers.add(observer);
    }
//通知所有观察者属性已经改变
    public void notifyObservers() {
        for (IObserver observer : observers) {
            observer.update(status);
        }
    }

}

2.观察者接口,所有具体观察者都应该实现该接口,该接口定义一个更新方法,具体的更新操作由具体观察者决定。

interface IObserver{

    public void update(int status);

}

3.具体观察者,实现观察者接口,然后在更新方法中定义自己想要进行的操作。

class AObserver implements IObserver{
    @Override
    public void update(int status) {
        System.out.println("AObserver收到通知,目标状态改变!----》status:"+status);
    }
}
class BObserver implements IObserver{
    @Override
    public void update(int status) {
        System.out.println("BObserver收到通知,目标状态改变!----》status:"+status);
    }
}

4.main方法

  public static void main(String[] args) {
        Tartget tartget = new Tartget();
        IObserver aobserver = new AObserver();
        IObserver bobserver = new BObserver();
        tartget.attach(aobserver);
        tartget.attach(bobserver);
        tartget.setStatus(1);
    }

观察者模式在工作中用到挺多的,spring框架中的事件机制就用到了观察者模式的思想。下面举个生活中的例子来帮助大家理解。
红绿灯,城市中生活离不开红绿灯,红绿灯用来协调不同方向上的车辆,行人的动作,以保证交通的畅通。下面是一个红绿灯的例子,这个例子很简单,就一个红绿灯,红灯亮,汽车停,行人过马路,绿灯亮,汽车行,行人等待。当然和实际生活中的不一样,我这只是举个例子。

import java.util.ArrayList;
import java.util.List;

/**
 * 红绿灯,即被观察者
 */
public class TrafficLight {
    private LightColor color;
    private List<Iobserver> iobservers = new ArrayList<>();

    public LightColor getColor() {
        return color;
    }

    public void setColor(LightColor color) {
        this.color = color;
        notifyObserver();
    }

    private void notifyObserver(){
        for (Iobserver iobserver : iobservers) {
            iobserver.update(color);
        }
    }

    public void attach(Iobserver iObserver){
        iobservers.add(iObserver);
    }

}

enum LightColor{
    red,
    green
}

/**
 *观察者接口
 */
interface Iobserver{
    void update(LightColor color);
}

class People implements Iobserver{

    @Override
    public void update(LightColor color) {
        switch (color) {
            case red:
                System.out.println("行人过马路");
                break;
            case green:
                System.out.println("行人等待");
        }
    }
}

class Car implements Iobserver{

    @Override
    public void update(LightColor color) {
        switch (color) {
            case green:
                System.out.println("汽车过马路");
                break;
            case red:
                System.out.println("汽车等待");
        }
    }
}

class test{
    public static void main(String[] args) throws InterruptedException {
        TrafficLight trafficLight = new TrafficLight();
        trafficLight.attach(new People());
        trafficLight.attach(new Car());
        trafficLight.setColor(LightColor.green);
        Thread.sleep(5000);
        trafficLight.setColor(LightColor.red);

    }
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 概述 观察者模式是对象的行为模式,又叫发布-订阅(Publish/Subscribe)模式、模型-视图(Model...
    今晚打肉山阅读 3,607评论 0 3
  • 观察者模式 定义了对象之间一对多的关系。 被观察者(主题)用一个公共的接口来更新观察者。 被观察者 / 观察者之间...
    徘徊0_阅读 1,756评论 2 0
  • 其他设计模式java单例模式java建造者模式java策略模式java代理模式java观察者模式java适配器模式...
    zhuzhiqiang00阅读 5,569评论 0 2
  • 明天就要开始考研课的第一课啦,很开心能在考研课之前一切尘埃落定,能够无所顾忌的向自己的理想冲击。 空...
    樱魅阅读 3,408评论 0 0
  • 因为最近在开发小程序,需要用到HTTPS,就看了下怎么配置这个东西,发现腾讯云上的申请挺好用的。 首先进入http...
    yieldHL阅读 2,383评论 0 1

友情链接更多精彩内容