美文网首页
观察者模式 java

观察者模式 java

作者: iarchitect | 来源:发表于2018-09-14 16:08 被阅读0次

观察者模式又称为订阅/发布模式
该模式定义了对象之间的一对多的依赖关系,这样,当“一”的一方状态发生变化时,它所依赖的多方都会受到通知并自动更新

举例:一个老师对应多个学生,老师发布作业,学生接收作业。

public interface Observer {
    //当主题改变时,会将一个String类型字符串传入该方法,每个观察者都需要实现该方法
    public void update(String info);
}

public interface Subject {
    //添加观察者
    void addObserver(Observer obj);
    //移除观察者
    void deleteObserver(Observer obj);
    //当方法主题改变时,这个方法被调用,通知所有的观察者
    void notifyObserver();
}

public class StudentObserver implements Observer {

    //保存一个Subject的引用,便于取消订阅

    private TeacherSubject t;
    //学生姓名
    private String name;
    //构造器,用于注册观察者

    public StudentObserver(String name, TeacherSubject t) {
        this.name = name;
        this.t = t;
        t.addObserver(this);
    }

    public TeacherSubject getT() {
        return t;
    }

    @Override
    public void update(String info) {
        System.out.println(name+"得到作业"+info);
    }
}

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

public class TeacherSubject implements Subject {

    //用来存放和记录观察者
    private List<Observer> observers = new ArrayList<Observer>();
    //记录状态的字符串
    private String info;

    @Override
    public void addObserver(Observer obj) {
        observers.add(obj);
    }

    @Override
    public void deleteObserver(Observer obj) {
        observers.remove(obj);
    }

    @Override
    public void notifyObserver() {
        for(Observer observer:observers){
            observer.update(info);
        }
    }
    //布置作业的方法,在方法最后,调用notifyObserver()方法,通知所有的观察者更新状态
    public void setHomework(String info){
        this.info=info;
        System.out.println("今天的作业是"+info);
        this.notifyObserver();
    }
}

public class TestObserver {
    public static void main(String[] args) {
        TeacherSubject teacherSubject = new TeacherSubject();
        StudentObserver xiaoming = new StudentObserver("xiaoming",teacherSubject);
        StudentObserver xiaohong = new StudentObserver("xiaohong",teacherSubject);

        teacherSubject.setHomework("第一章第一题");

        xiaohong.getT().deleteObserver(xiaohong);
        teacherSubject.setHomework("第一章第二题");

    }
}

输出结果:


image.png

相关文章

  • 观察者设计模式

    每周学点Java设计模式__观察者设计模式 本次继续更新java23中设计模式之一——观察者模式。 观察者模式(有...

  • RxJava 2.x知识笔记

    观察者模式的运用 传统的Java观察者模式可以参考此篇博客:Java观察者模式案例简析 RxJava 是基于Jav...

  • java建造者模式

    其他设计模式java单例模式java建造者模式java策略模式java代理模式java观察者模式java适配器模式...

  • java单例模式

    其他设计模式java单例模式java建造者模式java策略模式java代理模式java观察者模式java适配器模式...

  • java外观模式

    其他设计模式java单例模式java建造者模式java策略模式java代理模式java观察者模式java适配器模式...

  • java适配器模式

    其他设计模式java单例模式java建造者模式java策略模式java代理模式java观察者模式java适配器模式...

  • java观察者模式

    其他设计模式java单例模式java建造者模式java策略模式java代理模式java观察者模式java适配器模式...

  • java代理模式

    其他设计模式java单例模式java建造者模式java策略模式java代理模式java观察者模式java适配器模式...

  • java策略模式

    其他设计模式java单例模式java建造者模式java策略模式java代理模式java观察者模式java适配器模式...

  • 六、JDK自带观察者

    利用Java提供的Observer接口和Observable类实现观察者模式 对于观察者模式,其实Java已经为我...

网友评论

      本文标题:观察者模式 java

      本文链接:https://www.haomeiwen.com/subject/ulrsgftx.html