设计模式之观察者
来源:互联网 发布:友谊南路有淘宝城吗? 编辑:程序博客网 时间:2024/04/26 17:24
1
2
3
4
5
6
7
8
9
public
interface
ISubject {
public
void
registerObserver(IObserver observer);
public
void
removeObserver(IObserver observer);
public
void
notifyObserver();
}
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
42
43
44
45
46
47
48
49
50
51
52
53
public
class
WeatherSubject
implements
ISubject{
//保存所有对观察者对象的引用的集合
private
ArrayList<IObserver> observersList;
private
double
tempretrue;
private
String weather;
private
int
windClass;
public
WeatherSubject(){
observersList =
new
ArrayList<IObserver>();
}
/**
* 注册观察者的实现
*/
public
void
registerObserver(IObserver observer) {
observersList.add(observer);
}
/**
* 移除观察者的实现
*/
public
void
removeObserver(IObserver observer) {
int
index = observersList.indexOf(observer);
if
(index >=
0
){
observersList.remove(index);
}
}
/**
* 更新观察者的实现
*/
public
void
notifyObserver() {
for
(
int
i=
0
;i<observersList.size();i++){
IObserver observer = observersList.get(i);
observer.update(tempretrue, weather, windClass);
}
}
/**
* 设置新数据
* @param tempretrue
* @param weather
* @param windClass
*/
public
void
setData(
int
tempretrue, String weather,
int
windClass){
this
.tempretrue = tempretrue;
this
.weather = weather;
this
.windClass = windClass;
}
}
1
2
3
public
interface
IObserver {
public
void
update(
double
temp, String wea,
int
wind);
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public
class
TodayObserver
implements
IObserver{
private
ISubject subject;
public
TodayObserver(ISubject subject){
//如果需要,具体观察者角色可以保存一个指向具体主题角色的引用
this
.subject = subject;
subject.registerObserver(
this
);
}
public
void
update(
double
temp, String wea,
int
wind) {
System.out.println(
"Today tempreture:"
+temp);
System.out.println(
"Today weather:"
+wea);
System.out.println(
"Today wind class:"
+wind);
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public
class
TomorrowObserver
implements
IObserver{
private
ISubject subject;
public
TomorrowObserver(ISubject subject){
this
.subject = subject;
subject.registerObserver(
this
);
}
public
void
update(
double
temp, String wea,
int
wind) {
System.out.println(
"Tomorrow tempreture:"
+temp);
System.out.println(
"Tomorrow weather:"
+wea);
System.out.println(
"Tomorrow wind class:"
+wind);
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
public
class
TomorrowAfterObserver
implements
IObserver{
private
ISubject subject;
public
TomorrowAfterObserver(ISubject subject){
this
.subject = subject;
subject.registerObserver(
this
);
}
public
void
update(
double
temp, String wea,
int
wind) {
System.out.println(
"The day after tomorrow tempreture:"
+temp);
System.out.println(
"The day after tomorrow weather:"
+wea);
}
}
1
2
3
4
5
6
7
8
9
10
11
12
public
class
MainTest {
public
static
void
main(String[] args) {
WeatherSubject subject =
new
WeatherSubject();
//观察者的分别注册
TodayObserver today =
new
TodayObserver(subject);
TomorrowObserver tomorrow =
new
TomorrowObserver(subject);
TomorrowAfterObserver tomorrowAfter =
new
TomorrowAfterObserver(subject);
//被观察者的全部通知更新
subject.notifyObserver();
}
}
0 0
- 设计模式之-观察者
- 设计模式之观察者
- 设计模式之观察者
- 设计模式之观察者
- 设计模式之观察者
- 设计模式之观察者
- 设计模式之观察者
- 设计模式之观察者
- 设计模式之观察者
- 设计模式之观察者
- 设计模式之观察者
- 设计模式之观察者模式
- 设计模式之观察者模式
- 设计模式之观察者模式
- 设计模式之观察者模式
- 设计模式之观察者模式
- 设计模式之观察者模式
- 设计模式之观察者模式
- Python基础学习-爬虫小试2
- R语言常用帮助函数
- 成长是自己的事——关于“日报系统”的思考
- java 遍历树的四种方式
- python命令行选项和参数分割
- 设计模式之观察者
- sql锁表查询和解锁
- source ~/.bashrc ~/.bash_profile
- HandlerMethodArgumentResolver 自定义封装参数bean
- iOS页面间传值的方式(Delegate/NSNotification/Block/NSUserDefault/单例)
- Junit测试出现异常:Exception in thread "main" java.lang.NoSuchMethodError: org.junit.runner.Description.cre
- ORACLE游标概念讲解
- js 获取屏幕各种宽高的方法(浏览器兼容)
- iOS学习笔记44-IOS 遍历未知对象的属性和方法