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

Java设计模式-------观察者模式

时间:2014-09-02 15:58:54      阅读:230      评论:0      收藏:0      [点我收藏+]

标签:os   java   ar   for   2014   sp   on   工作   时间   

* 简单来说,观察者模式=发布者+订阅者。下面是一个有关猎头的典型的例子。在下面这张图当中有两个角色:
 * 猎头和寻找工作的人。找工作的人向猎头订阅,告知自己希望得到一份工作,当有新的工作机会的时候,

 * 猎头就会把这个信息通知给曾经向他订阅过的人。

猎头接口:

package com.pattern.observer;

/**
 * @author Qixuan.Chen
 * 创建时间:2014年9月2日
 */
public interface Subject {
	    public void registerObserver(Observer observer);
	    public void removeObserver(Observer observer);
	    public void notifyAllObservers();
}

订阅者接口:

package com.pattern.observer;

/**
 * @author Qixuan.Chen
 * 创建时间:2014年9月2日
 */
public interface Observer {
	//观察者更新
	public void update(Subject subject);
}

猎头实现类:

package com.pattern.observer;

import java.util.ArrayList;
import java.util.List;

/**
 * @author Qixuan.Chen
 * 创建时间:2014年9月2日
 * 猎头类
 */
public class HeadCounter implements Subject {
	    private List<Observer> observerList;
	    private List<String> jobList;
	 
	    public HeadCounter(){
	        observerList = new ArrayList<Observer>();
	        jobList = new ArrayList<String>();
	    }
	 
	    //实现接口的方法
	    //获取已注册的人员
	    @Override
	    public void registerObserver(final Observer observer) {
	        if(! observerList.contains(observer)){
	            observerList.add(observer);
	        }
	    }
	 
	    //删除已注册的人员
	    @Override
	    public void removeObserver(final Observer observer) {
	        if(observerList.contains(observer)){
	            observerList.remove(observer);
	        }
	    }
	 
	    //通知
	    @Override
	    public void notifyAllObservers() {
	        for(Observer observer : observerList){
	            observer.update(this);
	        }
	    }
	 
	    //增加新工作
	    public void addJob(final String job){
	        this.jobList.add(job);
	        notifyAllObservers();
	    }
	 
	    //获取工作
	    public List<String> getJobs(){
	        return jobList;
	    }
	 
	    public String toString(){
	        return jobList.toString();
	    }
}

订阅者实现类:

package com.pattern.observer;

/**
 * @author Qixuan.Chen
 * 创建时间:2014年9月2日
 * 订阅者类
 */
public class JobSeeker implements Observer{
	private String name;//订阅者姓名

    public JobSeeker(String name){
        this.name = name;
    }

    //实现接口的方法
    public void update(Subject subject) {
        System.out.println("----给-------"+this.name + "------发通知");
        System.out.println(subject);
    }

}
测试类:

package com.pattern.observer;

/**
 * @author Qixuan.Chen
 * 创建时间:2014年9月2日
 * 简单来说,观察者模式=发布者+订阅者。下面是一个有关猎头的典型的例子。在下面这张图当中有两个角色:
 * 猎头和寻找工作的人。找工作的人向猎头订阅,告知自己希望得到一份工作,当有新的工作机会的时候,
 * 猎头就会把这个信息通知给曾经向他订阅过的人。
 * 
 * 两接口,两实现,一测试
 */
public class TestDemo {
	 public static void main(String[] args) {
		 System.out.println("----------程序入口------------");
	     HeadCounter headCounter = new HeadCounter();
	     //注册订阅者
	     headCounter.registerObserver(new JobSeeker("Mike"));
	     headCounter.registerObserver(new JobSeeker("Chris"));
	     headCounter.registerObserver(new JobSeeker("Jeff"));
	     //通知所有订阅者有新的工作机会
	     headCounter.addJob("Google Job");
	     headCounter.addJob("Yahoo Job");
	 }

}

Java设计模式-------观察者模式

标签:os   java   ar   for   2014   sp   on   工作   时间   

原文地址:http://blog.csdn.net/kenhins/article/details/39005659

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