设计模式01观察者模式(java)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计模式01观察者模式(java)相关的知识,希望对你有一定的参考价值。
先发代码,有空来写内容。
observer1
1 import java.util.Observer; 2 import java.util.Observable; 3 4 //学生类(Student)继承Observable后变得可以被观察 5 class Student extends Observable{ 6 //属性 7 private String name; 8 private boolean isSleep = false; 9 private boolean isLate = false; 10 //构造函数 11 public Student(){} 12 public Student(String name){ 13 this.name = name; 14 } 15 //睡觉行为 16 public void sleep(){ 17 System.out.println(name + " is sleeping"); 18 isSleep = true; 19 setChanged(); 20 notifyObservers(); 21 22 } 23 public String toString(){ 24 return name; 25 } 26 } 27 //教师类(Teacher)实现Observer接口成为观察者 28 class Teacher implements Observer{ 29 @Override 30 public void update(Observable o,Object arg){ 31 System.out.println("teacher: "+o+",wakeup!wakeup!"); 32 } 33 } 34 //班主任类(ClassHead)实现Observer接口成为观察者 35 class ClassHead implements Observer{ 36 @Override 37 public void update(Observable o,Object arg){ 38 System.out.println("classHead: "+o+",cleanTheRoomAfterSchool"); 39 } 40 } 41 public class ObserverDemo{ 42 public static void main(String[] arguments){ 43 Student tom = new Student("Tom"); 44 tom.addObserver(new ClassHead()); 45 tom.addObserver(new Teacher()); 46 47 System.out.println("有 "+tom.countObservers()+" 个观察者在观察Tom"); 48 tom.sleep(); 49 50 } 51 }
observer2
import java.util.Map; import java.util.HashMap; import java.util.Observer; import java.util.Observable; //学生类(Student)继承Observable后变得可以被观察 class Student extends Observable{ //属性 private String name; private boolean isSleep = false; private boolean isLate = false; //构造函数 public Student(){} public Student(String name){ this.name = name; } //睡觉行为 public void sleep(){ System.out.println(name + " is sleeping"); isSleep = true; setChanged(); notifyObservers("sleep"); } //迟到行为 public void late(){ System.out.println(name + " was lated"); isLate = true; setChanged(); notifyObservers("late"); } public String toString(){ return name; } } //教师类(Teacher)实现Observer接口成为观察者 class Teacher implements Observer{ //参数arg作为key,该参数触发的回应作为value存储在Map中 private Map<String,String> info = new HashMap<String,String>(); public Teacher(){ info.put("sleep",",wakeup!wakeup!"); info.put("late",",come in."); } //添加键值对 public boolean addSay(String k,String v){ return info.put(k,v)==null?false:true; } @Override public void update(Observable o,Object arg){ String say = info.get(arg); if(say == null){ return; } System.out.println("teacher: "+o+say); } } //班主任类(ClassHead)实现Observer接口成为观察者 class ClassHead implements Observer{ private Map<String,String> info = new HashMap<String,String>(); public ClassHead(){ info.put("sleep",",goOutWashBaFace"); info.put("late",",cleanTheRoom!"); } public boolean addSay(String k,String v){ return info.put(k,v)==null?false:true; } @Override public void update(Observable o,Object arg){ String say = info.get(arg); if(say == null){ return; } System.out.println("classHead: "+o+say); } } public class ObserverDemo{ public static void main(String[] arguments){ Student tom = new Student("Tom"); tom.addObserver(new ClassHead()); tom.addObserver(new Teacher()); System.out.println("有 "+tom.countObservers()+" 个观察者在观察Tom"); tom.sleep(); tom.late(); } }
以上是关于设计模式01观察者模式(java)的主要内容,如果未能解决你的问题,请参考以下文章