你的位置:首页 > ASP.net教程

[ASP.net教程]设计模式01观察者模式(java)


 1 import java.util.Map; 2 import java.util.HashMap; 3 import java.util.Observer; 4 import java.util.Observable; 5  6 //学生类(Student)继承Observable后变得可以被观察 7 class Student extends Observable{ 8   //属性 9   private String name;10   private boolean isSleep = false;11   private boolean isLate = false;12   //构造函数13   public Student(){}14   public Student(String name){15     this.name = name;16   }17   //睡觉行为18   public void sleep(){19     System.out.println(name + " is sleeping");20     isSleep = true;21     setChanged();22     notifyObservers("sleep");23     24   }25   //迟到行为26   public void late(){27     System.out.println(name + " was lated");28     isLate = true;29     setChanged();30     notifyObservers("late");31   }32 }33 //教师类(Teacher)实现Observer接口成为观察者34 class Teacher implements Observer{35   //参数arg作为key,该参数触发的回应作为value存储在Map中36   private Map<String,String> info = new HashMap<String,String>();37   public Teacher(){38     info.put("sleep","wakeup!wakeup!");39     info.put("late","come in.");40   }41   //添加键值对42   public boolean addSay(String k,String v){43     return info.put(k,v)==null?false:true;44   }45   @Override46   public void update(Observable o,Object arg){47       String say = info.get(arg);48       if(say == null){49         return;50       }51       System.out.println("teacher: "+say);52   }53 }54 //班主任类(ClassHead)实现Observer接口成为观察者55 class ClassHead implements Observer{56   private Map<String,String> info = new HashMap<String,String>();57   public ClassHead(){58     info.put("sleep","goOutWashBaFace");59     info.put("late","cleanTheRoom!");60   }61   public boolean addSay(String k,String v){62     return info.put(k,v)==null?false:true;63   }64   @Override65   public void update(Observable o,Object arg){66       String say = info.get(arg);67       if(say == null){68         return;69       }70       System.out.println("classHead: "+say);71   }72 }73 public class ObserverDemo{74   public static void main(String[] arguments){75     Student tom = new Student("Tom");76     tom.addObserver(new ClassHead());77     tom.addObserver(new Teacher());78 79     System.out.println("有 "+tom.countObservers()+" 个观察者在观察Tom");80     tom.sleep();81     tom.late();82   }83 }