您的位置:首页 > 编程语言 > Java开发

设计模式--观察者模式

2016-04-09 00:00 267 查看
摘要: 简单记录观察者模式的使用。

观察者模式(observer):

当一个对象变化时,其它依赖该对象的对象都会收到通知,并且随着变化!

示例:

观察者模式测试类ObserverTest.java

/**
* 观察者模式测试类
*
* @author Kevin
* @date 2016-3-15
*/
public class ObserverTest {

public static void main(String[] args) {
HeadHunterImpl subject = new HeadHunterImpl();
subject.addObserver(new JobSeekerImpl("Mike"));
subject.addObserver(new JobSeekerImpl("Jeff"));

subject.addJob("Google Job");
subject.addJob("Apple Job");
}
}

主题接口类Subject.java

/**
* 主题接口
*
* @author Kevin
* @date 2016-3-15
*/
public interface Subject {

/**
* 增加观察者
*
* @author Kevin
* @param observer 观察者
*/
void addObserver(Observer observer);

/**
* 删除观察者
*
* @author Kevin
* @param observer 观察者
*/
void removeObserver(Observer observer);

/**
* 通知所有观察者
*
* @author Kevin
*/
void notifyAllObservers();

}

观察者接口类Observer.java

/**
* 观察者接口
*
* @author Kevin
* @date 2016-3-15
*/
public interface Observer {

/**
* 更新主题
*
* @author Kevin
*/
void update(Subject subject);

}

猎头类HeadHunterImpl.java

/**
* 猎头
*
* @author Kevin
* @date 2016-3-15
*/
public class HeadHunterImpl implements Subject {

/* 求职者列表 */
private List<Observer> userList;

/* 工作列表 */
private List<String> jobList;

public HeadHunterImpl() {
userList = new ArrayList<Observer>();
jobList = new ArrayList<String>();
}

@Override
public void addObserver(Observer observer) {
userList.add(observer);
}

@Override
public void removeObserver(Observer observer) {
userList.remove(observer);
}

@Override
public void notifyAllObservers() {
if (null != userList
&& userList.size() > 0) {
for (Observer observer : userList) {
observer.update(this);
}
}
}

/**
* 增加工作
*
* @author Kevin
* @param job 工作名称
*/
public void addJob(String job) {
this.jobList.add(job);
notifyAllObservers();
}

public List<String> getJobList() {
return jobList;
}

@Override
public String toString() {
return jobList.toString();
}
}

求职者类JobSeekerImpl.java

/**
* 求职者
*
* @author Kevin
* @date 2016-3-15
*/
public class JobSeekerImpl implements Observer {

/* 求职者名称 */
private String name;

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

@Override
public void update(Subject subject) {
System.out.println(this.name + " got notified!");

/* 打印工作列表 */
System.out.println(subject.toString());
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息