观察者UML
观察者UML,截自-大话设计模式什么是观察者模式?
定义:一种一对多的依赖关系,让多个观察者对象同事监听某一个主题对象。这个主题对象在状态发生改变时,会通知所有观察者对象,使它们能够自动更新自己。
观察者模式的例子,我们的身边有很多,比如用电热壶烧水,电热壶烧水这个事件就是一个主题对象subject,而当水壶里的烧开的时候会有发出提示音【这就是通知notify】;当水壶发出提示音时,可能张三要冲咖啡,李四要泡面,相当于张三、李四都订阅了水壶的提示音Attach;
电热壶烧水UML
一个简单的代理实现代码
public interface ObserverJava {
void doSomethings();
}
public class LiSi implements ObserverJava {
@Override
public void doSomethings() {
System.out.println("李四 泡面 !");
}
}
public class ZhangSan implements ObserverJava {
@Override
public void doSomethings() {
System.out.println("张三 冲茶 !");
}
}
public class Kettle {
private List<ObserverJava> observers = null;
public Kettle() {
observers = new ArrayList<>();
}
public void attach(ObserverJava observer) {
if (!observers.contains(observer))
observers.add(observer);
}
public void detach(ObserverJava observer) {
if (observers.contains(observer))
observers.remove(observer);
}
public void notifyAllObservers() {
for (int i = 0; i < observers.size(); i++) {
observers.get(i).doSomethings();
}
}
static class Test {
private static void main() {
Kettle kettle = new Kettle();
kettle.attach(new LiSi());
kettle.attach(new ZhangSan());
kettle.notify();
}
}
}
总结:观察者模式能把,观察主题和订阅者很好的解耦,当有新的订阅者添加进来也不会和观察主题发生直接关系。【所有的设计模式,都是为了更好的解耦而存在】
网友评论