观察者模式(Observer):观察者模式又叫发布-订阅模式,
观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使他们能够自动的更新自己。
Java中自带了观察者模式的Observer和Observerable。本文自己写了一个。
案例需求:自习课,大家都在玩耍,一个学生放哨,老师来了就通知大家老师来了。
1;创建一个通知者接口。(放哨的学生实现)
package ObserverModel; public interface Subj { void Attach(Obs obs); void detach(Obs obs); void message(); }
2:创建观察者超类。(玩耍的学生实现)
package ObserverModel; public abstract class Obs { protected String name; protected Subj sub; public Obs (String name,Subj sub){ this.name=name; this.sub=sub; } public abstract void update(); }
3:创建放哨学生的类,观察老师来没。
package ObserverModel; import java.util.LinkedList; import java.util.List; public class seeTeacher implements Subj { //同事列表 List<Obs>list=new LinkedList<Obs>(); private String action; public String getAction() { return action; } public void setAction(String action) { this.action = action; } @Override public void Attach(Obs obs) { // TODO Auto-generated method stub list.add(obs); } @Override public void detach(Obs obs) { // TODO Auto-generated method stub list.remove(obs); } @Override public void message() { // TODO Auto-generated method stub for(Obs o:list){ o.update(); } } }
4:创建玩耍的boy
package ObserverModel; public class PlayBoy extends Obs { public PlayBoy(String name, Subj sub) { super(name, sub); // TODO Auto-generated constructor stub } @Override public void update() { System.out.println(name+"老师来了"); } }
5:创建玩耍的boy。
package ObserverModel; public class PlayBoy2 extends Obs { public PlayBoy2(String name, Subj sub) { super(name, sub); // TODO Auto-generated constructor stub } @Override public void update() { // TODO Auto-generated method stub System.out.println(name+"老师来了"); } }
6:测试类。
package ObserverModel; /** * 案例需求:老师出去了,放哨的同学通知里面玩耍的同学,老师来了。 * 观察者模式:观察者模式又叫发布-订阅模式 * 观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听 * 某一个主题对象,这个主题对象在状态发生改变的时候,会通知所有观察者的对象, * 使得他们能够自动更新自己。 * @author 我不是张英俊 * */ public class Test { public static void main(String[] args) { seeTeacher teacher=new seeTeacher(); PlayBoy playboy=new PlayBoy("李小璐", teacher); PlayBoy2 playBoy2=new PlayBoy2("哪吒", teacher); teacher.Attach(playboy); teacher.Attach(playBoy2); teacher.message(); } }
7:控制台
李小璐老师来了
哪吒老师来了