当一个类完成某个事件时,需要另外一个类做出相应反应,应该这么办呢,按照以前的思路,就两个类相互组合就可以解决了,
但是这样会产生双向耦合的代码,观察者模式就是用来解耦的。
在嵌入式中需要实时对事件做出反应,c++写嵌入式应用程序时,观察者模式也是比较好的选择。
前几篇程序没有按照编写的先后顺序贴出来,接下来的文章都以编写程序先后贴出。
uml类图:
工程结构:
package com.burt;
public class Observer {
public void update(){}
}
package com.burt;
import java.util.ArrayList;
public class Subject {
ArrayList<Observer> observers = new ArrayList<Observer>();
public void attach(Observer observer){
observers.add(observer);
}
public void detach(Observer observer){
observers.remove(observer);
}
public void notifyObservers(){
for(Observer observer:observers){
observer.update();
}
}
}
package com.burt;
public class ConcreateObserver extends Observer{
private String name;
private ConcreateSubject subject;
public ConcreateObserver(String name, ConcreateSubject subject){
this.name = name;
this.subject = subject;
}
public void update(){
System.out.println("Observer"+name+": state = "+subject.getAction());
}
}
package com.burt;
public class ConcreateSubject extends Subject {
private String action;
public String getAction() {
return action;
}
public void setAction(String action) {
this.action = action;
}
}
package com.burt;
public class Main {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
ConcreateSubject subject = new ConcreateSubject();
subject.attach(new ConcreateObserver("x", subject));
subject.attach(new ConcreateObserver("y", subject));
subject.attach(new ConcreateObserver("z", subject));
subject.setAction("ABC");
subject.notifyObservers();
}
}
结果为:
上文只是观察者模式的简单模型,还有高级一点版本,等我看看在写。