设计模式--观察者模式
2016-04-09 00:00
267 查看
摘要: 简单记录观察者模式的使用。
观察者模式(observer):
示例:
观察者模式测试类ObserverTest.java
主题接口类Subject.java
观察者接口类Observer.java
猎头类HeadHunterImpl.java
求职者类JobSeekerImpl.java
观察者模式(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()); } }
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序