每天一个设计模式:观察者模式 - Sanarous的博客

每天一个设计模式:观察者模式

观察者模式属于行为模式类别,在对象之间存在一对多关系时使用,即当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。

看不懂图的人端着小板凳到这里来,给你举个栗子:假设有三个人,小美(女,22),小王和小李。小美很漂亮,小王和小李是两个程序猿,时刻关注着小美的一举一动。有一天,小美说了一句:“谁来陪我打游戏啊。”这句话被小王和小李听到了,结果乐坏了,蹭蹭蹭,没一会儿,小王就冲到小美家门口了,在这里,小美是被观察者,小王和小李是观察者,被观察者发出一条信息,然后观察者们进行相应的处理。

看代码:

1
2
3
4
public interface Person {
//小王和小李通过这个接口可以接收到小美发过来的消息
void getMessage(String s);
}

这个接口相当于小王和小李的电话号码,小美发送通知的时候就会拨打getMessage这个电话,拨打电话就是调用接口,看不懂没关系,先往下看 :

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
public class LaoWang implements Person {

private String name = "小王";

public LaoWang() {
}

@Override
public void getMessage(String s) {
System.out.println(name + "接到了小美打过来的电话,电话内容是:" + s);
}
}

public class LaoLi implements Person {

private String name = "小李";

public LaoLi() {
}

@Override
public void getMessage(String s) {
System.out.println(name + "接到了小美打过来的电话,电话内容是:->" + s);
}
}

代码很简单,我们再看看小美的代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class XiaoMei {
List<Person> list = new ArrayList<Person>();
public XiaoMei(){
}

public void addPerson(Person person){
list.add(person);
}

//遍历list,把自己的通知发送给所有暗恋自己的人
public void notifyPerson() {
for(Person person:list){
person.getMessage("你们过来吧,谁先过来谁就能陪我一起玩儿游戏!");
}
}
}

我们写一个测试类来看一下结果对不对 :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class Test {
public static void main(String[] args) {

XiaoMei xiao_mei = new XiaoMei();
LaoWang lao_wang = new LaoWang();
LaoLi lao_li = new LaoLi();

//小王和小李在小美那里都注册了一下
xiao_mei.addPerson(lao_wang);
xiao_mei.addPerson(lao_li);

//小美向小王和小李发送通知
xiao_mei.notifyPerson();
}
}
如果这篇文章对您很有帮助,不妨
-------------    本文结束  感谢您的阅读    -------------
0%