1.观察者模式(Observer)
大白话就是,多个观察者,一个被观察者,说明是一对多的依赖关系;比如,N个人在公交站等公交,那么公交车就是被观察者,N个人就属于观察者,公交一到站,N个人就开始往公交车上走;这个过程就是一个观察者模式吧!我是这样理解的,有不妥的,还请纠正!
2. 观察者模式的组成
a. 观察者 (watcher)
所有在等公交车的人
b. 观察者接口
观察者都在观察公交车到站停车 ,而所有观察者都有上车的意思,并且也需要上车的动作,所以我们要提前给观察者提供统一的操作 (观察者接口)
c. 被观察者(watched)
被观察者(公交车)
d. 被观察者接口
(公交车)到站会反馈给观察者下车或是上车的信号
3. 代码展示
1 . 观察者接口
/**
* 观察者接口
*/
public interface watcher
{
void GetOn(String str);
}
2 . 观察者
/**
* 实现观察者接口的观察者
*/
public class PeopleWatcher implements watcher
{
@Override
public void GetOn(String str) {
System.out.println(str);
}
}
3 . 被观察者
/**
* 被观察者
*/
public interface watched
{
public void add(watcher watcher);
public void romete(watcher watcher);
public void notify(String str);
}
4 . 被观察者的实现
/**
* 被观察者的实现
*/
public class Carwatched implements watched
{
//获取所有观察者信息
List<watcher> watcherList =new LinkedList<>();
/**
* 添加观察者
* @param watcher
*/
@Override
public void add(watcher watcher) {
watcherList.add(watcher);
}
/**
* 移除观察者
* @param watcher
*/
@Override
public void romete(watcher watcher) {
watcherList.remove(watcher);
}
/**
*通知所有观察者
*/
@Override
public void notify(String str) {
for (watcher w:watcherList) {
w.GetOn(str);
}
}
}
5 .测试类
public static void main(String[] args)
{
watched car=new Carwatched();
watcher people1=new PeopleWatcher();
watcher people2=new PeopleWatcher();
watcher people3=new PeopleWatcher();
watcher people4=new PeopleWatcher();
car.add(people1);
car.add(people2);
car.add(people3);
car.add(people4);
car.notify("车来了,上车!");
}
打印结果