观察者模式之Observer和Subject
Posted smileblogs
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了观察者模式之Observer和Subject相关的知识,希望对你有一定的参考价值。
package cn.it.observe2; public interface Observer { void update(String status); }
package cn.it.observe2; public class ObserverStudent implements Observer { Subject subject; String studentName; public ObserverStudent(String studentName, Subject subject) { this.studentName = studentName; this.subject = subject; subject.registerObserver(this); } public void update(String status) { System.out.println(studentName + "得到作业:" + status); } }
package cn.it.observe2; public interface Subject { /** * 注册观察者 */ void registerObserver(Observer observer); /** * 移除观察者 */ void removeObserver(Observer observer); /** * 通知观察者 */ void notifyObservers(String name); }
package cn.it.observe2; import java.util.ArrayList; import java.util.List; public class SubjectTeacher implements Subject { List<Observer> observers = new ArrayList<Observer>(); public void registerObserver(Observer observer) { observers.add(observer); } public void removeObserver(Observer observer) { int i = observers.indexOf(observer); if(i>=0){ observers.remove(observer); } } public void notifyObservers(String status) { for (Observer observer : observers) { observer.update(status); } } //布置作业的方法,在方法最后,需要调用notifyObserver()方法,通知所有观察者更新状态 public void setHomework(String status){ System.out.println("今天的作业是" + status); this.notifyObservers(status); } }
package cn.it.observe2; /** * 观察者模式提供了一种对象设计,让主题和观察者之间耦合度降得很低,为什么呢?关于观察者的一切,主题只知道观察者实现了Observer接口,并不需要观察者具体的类是谁,做了什么或者其他细节. * * 这样的话,由于松耦合,改变主题或者观察者其中一方,并不会影响另一方,只要他们之间的接口仍被遵守,就可以自由地改变它. * * 降低对象之间的耦合度,也是面设对象设计的一个很重要的原则. */ public class TestMain { public static void main(String[] args) { Subject teacher = new SubjectTeacher(); Observer zhangsan = new ObserverStudent("张三", teacher); Observer lisi = new ObserverStudent("李四", teacher); ((SubjectTeacher) teacher).setHomework("第二页第六题"); ((SubjectTeacher) teacher).setHomework("第三页第六题"); } }
以上是关于观察者模式之Observer和Subject的主要内容,如果未能解决你的问题,请参考以下文章