java-设计模式(行为型)-【观察者模式】

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
张学生收到通知。。。
李老师收到通知。。。

  

 

posted @ 2015-04-20 11:22  beyondbycyx  阅读(139)  评论(0编辑  收藏  举报