美文网首页
设计模式--观察者模式

设计模式--观察者模式

作者: jack_520 | 来源:发表于2018-08-08 00:22 被阅读0次

ps:文章来自www.cnblogs.com/fingerboy/p/5468994.html

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

这里以老师学生为例:

//主题接口

interface Subject{

//添加观察者

 void addObserver(Observer obj);

//删除观察者

 void deleteObserver(Observer obj);

//当主题状态改变时,这个方法被调用,通知所有观察者

void notifyObserver();

}

//Observer接口(观察者)

interface Observer{

//当主题状态改变时,会将一个String类型传入改方法,每个观察者都需要实现这个方法

public void update(String info);

}

//老师

public class TeacherSubject implements Subject{

    private List<Observer> observerList = new ArrayList<Observer>();

   //记录状态的字符串

    private String info;

    public void addObserver(Observer obj){

observerList.add(obj);

   }

    public void deleteObserver(Observer obj){

      if(observerList.contains(obj))  observerList.remove(obj);

   }

  public void notifyObserver(){

     for(Observer observer: observerList){

         observer.update(info);

     }

  }

//布置作业方法

public void setHomework(String info){

 this.info = info;

System.out.println("今日作业----"+info);

this.notifyObserver();

}

}

//学生

public class StudentObserver implements Obsesrver{

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

private Subject subject;

private String name;

//构造器用来注册观察者

public StudentObserver(String name,Subject subject){

 this.name = name;

this. subject = subject;

//新建学生时,默认让他从老师那里订阅。

subject.addObserver(this);

}

public void update(String info){

System.out.println(name+"----得到作业"+info);

}

}

//测试类

public class Test{

  public static void main(String[] args){

Subject teacher = new TeacherSubject();

Observer zhang = new StudentObserver("张",teacher);

Observer wang = new StudentObserver("王",teacher);

Observer li = new StudentObserver("李",teacher);

teacher.setHomeWork("背诵课文");

teacher.setHomeWork("背诵乘法口诀");

teacher.setHomeWork("抄写单词");

//输出 今日作业--背诵课文

//张----得到作业背诵课文

//王----得到作业背诵课文

//李----得到作业背诵课文

// 今日作业--背诵乘法口诀

//。。。。。。。。

}

}

java 内置了观察者模式 在java.util包包含了Observer与Observerable.功能类似Subject与Observer接口

观察者模式好处:

观察者模式提供了一种对象设计,让主题与观察者之间耦合度降低,因为关于观察者的一切,只要指定观察者实现了Observer接口,并不关心观察者具体的类型是谁,有什么功能等其它细节。

相关文章

  • 观察者设计模式

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

  • RxJava基础—观察者模式

    设计模式-观察者模式 观察者模式:观察者模式(有时又被称为发布(publish )-订阅(Subscribe)模式...

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

    [toc] 设计模式02-观察者者设计模式 主要来源Head First设计模式(书)观察者设计模式是JDK中使用...

  • 11.9设计模式-观察者模式-详解

    设计模式-观察者模式 观察者模式详解 观察者模式在android中的实际运用 1.观察者模式详解 2.观察者模式在...

  • RxJava设计模式与原理

    标准观察者设计模式 RxJava是一种特殊的观察者模式,首先我们先来看标准的观察者设计模式。在标准观察者模式中,存...

  • 设计模式

    常用的设计模式有,单例设计模式、观察者设计模式、工厂设计模式、装饰设计模式、代理设计模式,模板设计模式等等。 单例...

  • Guava源码分析——EventBus

    EventBus的设计理念是基于观察者模式的,可以参考设计模式(1)—观察者模式先来了解该设计模式。 1、程序示例...

  • 设计模式之观察者模式

    设计模式之观察者模式 本篇是设计模式系列博客的第四篇,本篇主要学习设计模式中的第二个行为型模式---观察者模式。 ...

  • PHP设计模式之观察者模式

    PHP设计模式之观察者模式

  • Android中涉及的模式

    我的Java设计模式-建造者模式 我的Java设计模式-观察者模式 重学设计模式之单例模式

网友评论

      本文标题:设计模式--观察者模式

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