标签:
1.观察者模式(Observer Mode)
定义:一种一对多的关系,属于类与类之间的关系,不涉及继承。
当一个对象变化时,其它依赖该对象的对象都会收到通知,并且随着变化!
关系图:
2.领导通知学生和老师的例子
2.1 观察者
//观察者接口:更新方法(更新所有的子类) public interface Observer { //更新所有的Observer void update(); } //学生类 class Student implements Observer { String name; public Student(String name) { this.name=name; } @Override public void update() { // TODO Auto-generated method stub System.out.println(name+"收到通知。。。"); } } //老师类 class Teacher implements Observer { String name; public Teacher (String name) { this.name=name; } @Override public void update() { // TODO Auto-generated method stub System.out.println(name+"收到通知。。。"); }
2.2 主体:领导类
//主体:管理所有的观察者和通知观察者 public abstract interface Subject { //添加观察者方法 void addObserver(Observer ob); //删除观察者方法 void removeObserver(Observer ob); //通知所有的观察者 void notifyObservers(); } //领导类 class Leader implements Subject { //存储所有观察者的池:线程同步类vector private Vector<Observer> vt=new Vector<Observer>(); //添加观察者 @Override public void addObserver(Observer ob) { // TODO Auto-generated method stub vt.add(ob); } //删除观察者 @Override public void removeObserver(Observer ob) { // TODO Auto-generated method stub vt.remove(ob); } //通知观察者 @Override public void notifyObservers() { //调用每个观察者的更新方法 Enumeration<Observer> e=vt.elements(); System.out.print("领导通知所有下属:"); getCurrentDate(); while(e.hasMoreElements()) { Observer ob=e.nextElement(); ob.update(); } } //获取当前系统时间 public void getCurrentDate() { Calendar cal=Calendar.getInstance(); SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String date=sdf.format(cal.getTime()); System.out.println(date); } }
2.3 测试
public class Test { public static void main(String[] args) { // TODO Auto-generated method stub Subject leader=new Leader(); Student stu1=new Student("张学生"); Teacher t1=new Teacher("李老师"); //添加入观察者池 leader.addObserver(stu1); leader.addObserver(t1); //通知所有观察者 leader.notifyObservers(); } }
2.4 运行结果
领导通知所有下属:2015-04-20 11:22:06 张学生收到通知。。。 李老师收到通知。。。
标签:
原文地址:http://www.cnblogs.com/beyondbycyx/p/4441039.html