资讯专栏INFORMATION COLUMN

设计模式系列之观察者模式

Edison / 947人阅读

本文从jdk内置的观察者模式来介绍观察者模式。
业务场景:当老师进门的时候,班长带头叫“老师好”,然后全班同学一起交“老师好”
因为太简单,直接上代码

班长继承自Observable

package Observer;

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

public class Monitor extends Observable{
    public Monitor() {
        super();
    }

    @Override
    public synchronized void addObserver(Observer o) {
        super.addObserver(o);
    }

    @Override
    public synchronized void deleteObserver(Observer o) {
        super.deleteObserver(o);
    }

    @Override
    public void notifyObservers() {
        super.notifyObservers();
    }

    @Override
    public void notifyObservers(Object arg) {
        super.notifyObservers(arg);
    }

    @Override
    public synchronized void deleteObservers() {
        super.deleteObservers();
    }

    @Override
    protected synchronized void setChanged() {
        super.setChanged();
    }

    @Override
    protected synchronized void clearChanged() {
        super.clearChanged();
    }

    @Override
    public synchronized boolean hasChanged() {
        return super.hasChanged();
    }

    @Override
    public synchronized int countObservers() {
        return super.countObservers();
    }
}

学生继承自Observer

package Observer;

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

/**
 * 观察者
 */
public class Student implements Observer{
    String name;

    public Student() {
    }
    public Student(String name) {
        this.name = name;
    }

    @Override
    public void update(Observable o, Object arg) {
        System.out.println("学生" + this.name + "说老师好");
    }
}

测试类:

package Observer;

public class Maintest {

    public static void main(String[] args) {
        Monitor monitor = new Monitor();

        Student student1 = new Student("小明");
        monitor.addObserver(student1);

        Student student2 = new Student("小蓝");
        monitor.addObserver(student2);

        Student student3 = new Student("小白");
        monitor.addObserver(student3);

        // 只有设置了这个值才进行通知
        monitor.setChanged();
        // 班长通知所有学生老师来了,起立
        monitor.notifyObservers();
    }
}

结果:

学生小白说老师好
学生小蓝说老师好
学生小明说老师好

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/75027.html

相关文章

  • php设计模式

    摘要:我们今天也来做一个万能遥控器设计模式适配器模式将一个类的接口转换成客户希望的另外一个接口。今天要介绍的仍然是创建型设计模式的一种建造者模式。设计模式的理论知识固然重要,但 计算机程序的思维逻辑 (54) - 剖析 Collections - 设计模式 上节我们提到,类 Collections 中大概有两类功能,第一类是对容器接口对象进行操作,第二类是返回一个容器接口对象,上节我们介绍了...

    Dionysus_go 评论0 收藏0
  • php设计模式

    摘要:我们今天也来做一个万能遥控器设计模式适配器模式将一个类的接口转换成客户希望的另外一个接口。今天要介绍的仍然是创建型设计模式的一种建造者模式。设计模式的理论知识固然重要,但 计算机程序的思维逻辑 (54) - 剖析 Collections - 设计模式 上节我们提到,类 Collections 中大概有两类功能,第一类是对容器接口对象进行操作,第二类是返回一个容器接口对象,上节我们介绍了...

    vspiders 评论0 收藏0
  • JS设计模式Obeserver(察者模式、Publish/Subscribe(发布/订阅)模式

    摘要:观察者模式定义设计模式中对的定义一个对象称为维持一系列依赖于它观察者的对象,将有关状态的任何变更自动通知给它们。如图模式比较观察者模式则多了一个类似于话题调度中心的流程,发布者和订阅者解耦。 Obeserver(观察者)模式 定义 《js设计模式》中对Observer的定义:一个对象(称为subject)维持一系列依赖于它(观察者)的对象,将有关状态的任何变更自动通知给它们。 《设计模...

    荆兆峰 评论0 收藏0
  • js设计模式察者模式和发布/订阅模式

    摘要:添加获取长度获取下标通知首先我们声明一个主体类,里面包含一个观察者数组,还有一些操作方法。观察者通用声明一个更新接口,用来获取主体分发的通知。主体分发消息给观察者。 观察者模式 The Observer is a design pattern where an object (known as a subject) maintains a list of objects dependi...

    HitenDev 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<