标签:
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