设计模式之观察者模式

本文解析了Java中的观察者模式,介绍了被观察者类(Pub)如何通过setChanged和notifyObservers传递事件,观察者类(Obs)如何实现Observer接口并接收并处理事件。核心概念包括 Pub静态实例、getName与publish方法,以及Obs的update方法。
摘要由CSDN通过智能技术生成

被观察者

package com;

import java.util.Observable;

/**
 * 被观察者
 */
public class Pub extends Observable {

    private static String name="hello:";

    private static Pub pub = null;

    private Pub() {

    }

    public static String getName() {
        return name;
    }

    public static Pub getInstance() {
        if (pub == null) {
            pub = new Pub();
        }
        return pub;
    }

    public void publish(Eve eve) {
        System.out.println(eve.getVersion() + "    " + eve.getContent());
        setChanged();
        notifyObservers(eve);
    }
}

观察者

package com;

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

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


    @Override
    public void update(Observable o, Object arg) {
        Pub pub = (Pub) o;
        Eve mod = (Eve) arg;
        System.out.println(pub.getName() + "    " + mod.getVersion() + "    " + mod.getContent());
    }
}

事件

package com;

/**
 * 事件
 */
public class Eve {

    private String version;
    private String content;

    public String getVersion() {
        return version;
    }

    public void setVersion(String version) {
        this.version = version;
    }

    public String getContent() {
        return content;
    }

    public void setContent(String content) {
        this.content = content;
    }
}

主类

package com;

public class Main {
    public static void main(String[] args) {
        Pub pub=Pub.getInstance();//被观察者

        Obs obs=new Obs();//观察者
        Obs obs1=new Obs();//观察者

        pub.addObserver(obs1);
        pub.addObserver(obs);

        Eve eve=new Eve();//事件
        eve.setVersion("0.01");
        eve.setContent("第一个版本");

        pub.publish(eve);//被观察者发布事件
    }
}

观察者需要实现Observer并重写update方法

被观察者需要实现Observable ,主要是通过setChanged, notifyObservers方法将事件传递给观察者,其中在notifyObservers方法中会调用update方法。

被观察者中加入观察者,当有事件发生时,只需被观察者载入事件,那么事件将会被通知到观察者。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值