Java设计模式
来源:互联网 发布:hashset源码解析 编辑:程序博客网 时间:2024/06/10 22:02
本文由 ImportNew -杨帆 翻译自programcreek。如需转载本文,请先参见文章末尾处的转载要求。
![](http://cdn1.importnew.com/2013/12/observer-pattern.gif)
原文链接: programcreek 翻译: ImportNew.com - 杨帆
译文链接: http://www.importnew.com/7924.html
[ 转载请保留原文出处、译者和译文链接。]
ImportNew注:如果你也对Java技术翻译分享感兴趣,欢迎加入我们的 Java开发 小组。参与方式请查看小组简介。
简而言之,观察者模式=发布者+注册者。
观察者模式用来对GUI中的动作做侦听。Swing GUI的例子就表明了动作侦听是怎样实现观察者模式的。
下面是一个猎头的典型例子。这个图中有2个角色-猎头和求职者。求职者先在猎头处注册,当有新的工作机会时猎头就会通知求职者。
观察者模式类图
![](http://cdn1.importnew.com/2013/12/observer-pattern.gif)
Java代码
Subject接口
1
2
3
4
5
public
interface
Subject {
public
void
registerObserver(Observer o);
public
void
removeObserver(Observer o);
public
void
notifyAllObservers();
}
Observer接口
1
2
3
public
interface
Observer {
public
void
update(Subject s);
}
Hunter类实现了Subject接口
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
import
java.util.ArrayList;
public
class
HeadHunter
implements
Subject{
//define a list of users, such as Mike, Bill, etc.
private
ArrayList<Observer> userList;
private
ArrayList<String> jobs;
public
HeadHunter(){
userList =
new
ArrayList<Observer>();
jobs =
new
ArrayList<String>();
}
@Override
public
void
registerObserver(Observer o) {
userList.add(o);
}
@Override
public
void
removeObserver(Observer o) {}
@Override
public
void
notifyAllObservers() {
for
(Observer o: userList){
o.update(
this
);
}
}
public
void
addJob(String job) {
this
.jobs.add(job);
notifyAllObservers();
}
public
ArrayList<String> getJobs() {
return
jobs;
}
public
String toString(){
return
jobs.toString();
}
}
JobSeeker是一个观察者:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public
class
JobSeeker
implements
Observer {
private
String name;
public
JobSeeker(String name){
this
.name = name;
}
@Override
public
void
update(Subject s) {
System.out.println(
this
.name +
" got notified!"
);
//print job list
System.out.println(s);
}
}
开始使用:
1
2
3
4
5
6
7
8
9
10
11
12
public
class
Main {
public
static
void
main(String[] args) {
HeadHunter hh =
new
HeadHunter();
hh.registerObserver(
new
JobSeeker(
"Mike"
));
hh.registerObserver(
new
JobSeeker(
"Chris"
));
hh.registerObserver(
new
JobSeeker(
"Jeff"
));
//每次添加一个个job,所有找工作人都可以得到通知。
hh.addJob(
"Google Job"
);
hh.addJob(
"Yahoo Job"
);
}
}
JDK中观察者模式的实现
java.util.EventListener
Swing GUI示例
原文链接: programcreek 翻译: ImportNew.com - 杨帆
译文链接: http://www.importnew.com/7924.html
[ 转载请保留原文出处、译者和译文链接。]
0 0
- [Java] JAVA设计模式
- Java设计模式--Java设计模式介绍
- Java设计模式-模板设计
- java设计模式-----(设计原则)
- Java设计模式-设计原则
- java设计模式-观察者模式
- Java设计模式-----Singleton模式
- Java设计模式-----Command模式
- Java设计模式-----State模式
- Java设计模式-----Composite模式
- Java设计模式 -- 策略模式
- java设计模式-----策略模式
- java设计模式_Composite模式
- java 设计模式-策略模式
- java设计模式 访问者模式
- java设计模式-代理模式
- java设计模式----适配器模式
- Java 设计模式 --装饰模式
- java使用collections.sort排序模板
- Oracle字符集
- mysql存储过程插入后返回ID
- DMA Engine
- Win8快捷键收藏,效率党必备!珍惜生命者必备!
- Java设计模式
- listview Filter
- JS 数字,金额 用逗号 隔开(数字格式化)
- 在MyEclipse 6.5中配置ext开发环境
- 通用makefile是如何炼成的(III)
- javaweb之过滤器
- JDBC连接各种数据库方法
- SIP协议详解(中文)-1
- JavaScript 省市县三级联动