码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2015-04-20 13:05:17      阅读:140      评论:0      收藏:0      [点我收藏+]

标签:

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

  

 

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

标签:

原文地址:http://www.cnblogs.com/beyondbycyx/p/4441039.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!