行为型模式之观察者模式(Observer)
来源:互联网 发布:r语言lda函数源码 编辑:程序博客网 时间:2024/04/30 09:30
观察者模式描述的是事件的通知方式,可用于“订阅-分发”、“监听器”等场景,一个主题对象发生变化时通知所有的观察者进行相应的处理。
JDK自身内置了观察者模式实现,可以直接使用JDK自身的观察者模式!
场景:求职者可以向猎头注册登记,猎头在有工作的时候通知求职者。
设计:
示例代码:
import java.util.ArrayList;import java.util.List;interface JobSeeker { void assessJob(String job);}interface HeadHunter{ void registerJobSeeker(JobSeeker jobSeeker); void removeJobSeeker(JobSeeker jobSeeker); void addJob(String job); void notifyAllJobSeekers();}class HeadHunterCompany implements HeadHunter { private List<JobSeeker> jobSeekers = new ArrayList<JobSeeker>(); private String job; public void registerJobSeeker(JobSeeker jobSeeker) { jobSeekers.add(jobSeeker); } public void removeJobSeeker(JobSeeker jobSeeker) { jobSeekers.remove(jobSeeker); } public void addJob(String job) { this.job = job; System.out.println("添加新工作:" + job); notifyAllJobSeekers();// 关键:通知求职者。 } public void notifyAllJobSeekers() { for (JobSeeker jobSeeker : jobSeekers) { jobSeeker.assessJob(job); } }}class Mike implements JobSeeker { public void assessJob(String job) { System.out.println("Mike 查看工作: " + job); }}class Lucy implements JobSeeker { public void assessJob(String job) { System.out.println("Lucy 查看工作: " + job); }}public class Test { public static void main(String[] args) { HeadHunter headHunter = new HeadHunterCompany(); headHunter.registerJobSeeker(new Mike()); headHunter.registerJobSeeker(new Lucy()); headHunter.addJob("研发工程师职位"); headHunter.addJob("行政专员职位"); }}输出:
添加新工作:研发工程师职位Mike 查看工作: 研发工程师职位Lucy 查看工作: 研发工程师职位添加新工作:行政专员职位Mike 查看工作: 行政专员职位Lucy 查看工作: 行政专员职位
使用JDK的观察者模式实现:
import java.util.Observable;import java.util.Observer;class HeadHunterCompany extends Observable { private String job; public void addJob(String job) { this.job = job; System.out.println("添加新工作:" + job); // 关键:通知求职者。 setChanged(); // notifyObservers(); notifyObservers(this.job); } @Override public String toString() { return "猎头公司"; }}class Mike implements Observer { public void update(Observable o, Object arg) { System.out.println("Mike 收到来自 " + o + " 的工作: " + arg); }}class Lucy implements Observer { public void update(Observable o, Object arg) { System.out.println("Lucy 收到来自 " + o + " 的工作: " + arg); }}public class Test { public static void main(String[] args) { HeadHunterCompany headHunter = new HeadHunterCompany(); headHunter.addObserver(new Mike()); headHunter.addObserver(new Lucy()); headHunter.addJob("研发工程师职位"); headHunter.addJob("行政专员职位"); }}输出:
添加新工作:研发工程师职位Lucy 收到来自 猎头公司 的工作: 研发工程师职位Mike 收到来自 猎头公司 的工作: 研发工程师职位添加新工作:行政专员职位Lucy 收到来自 猎头公司 的工作: 行政专员职位Mike 收到来自 猎头公司 的工作: 行政专员职位
- 行为型模式之观察者模式(Observer)
- 行为型模式之观察者模式(Observer)
- 11种行为型模式之:观察者模式 (Observer)
- 行为型模式-----观察者模式(Observer)
- 行为型模式之观察者OBSERVER
- Observer观察者(行为型模式)
- 十九、观察者模式Observer(行为型)
- 行为型-观察者模式(Observer)
- 行为型模式-观察者observer
- 行为模式:Observer(观察者)
- 设计模式----行为型模式之观察者模式(Observer Pattern)
- 设计模式----行为型模式之观察者模式(Observer Pattern)
- 设计模式----行为型模式之观察者模式(Observer Pattern)
- 设计模式----行为型模式之观察者模式(Observer Pattern)
- 设计模式----行为型模式之观察者模式(Observer Pattern)
- 设计模式----行为型模式之观察者模式(Observer Pattern)
- 设计模式----行为型模式之观察者模式(Observer Pattern)
- 设计模式----行为型模式之观察者模式(Observer Pattern)
- 什么是spring的IOC AOP?
- js写九九乘法表
- 关于mysql字符集问题
- 《代码大全》 第四章-五张读书笔记 建立子程序的步骤,高质量子程序的特点
- 传话游戏--Beauty of Programming(2013全国挑战赛)
- 行为型模式之观察者模式(Observer)
- hdu 3127 二维完全背包,长方形布料剪裁求最大价值
- 关于ubunut挂载android设备问题
- iPhone中调用WCF RESTFUL Service
- VC++中获取DC的四种方法
- 关于如何创建启动器图标的问题
- js中各种跨网页方法
- poj1276
- [百度分享]频繁分配释放内存导致的性能问题的分析