【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>
观察者模式(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());
}
}
来源:oschina
链接:https://my.oschina.net/u/2619918/blog/655733