观察者模式:一个目标物件管理所有相依于它的观察者物件,并且在它本身的状态改变时主动发出通知。
// 抽象观察者
public interface watcher {
public void update(String str);
}
//抽象被观察者
public interface watchered {
public void addwatcher(watcher watcher);
public void removewatcher(watcher watcher);
public void notifywatcher(String str);
}
//具体观察者
public class cwatcher implements watcher {
String name;
@Override
public void update(String str) {
System.out.println(name+":"+str);
}
public cwatcher(String name){
this.name =name;
}
}
//具体被观察者
public class cwatchered implements watchered {
List<watcher> list = new ArrayList<watcher>();
@Override
public void addwatcher(watcher watcher) {
list.add(watcher);
}
@Override
public void removewatcher(watcher watcher) {
list.remove(watcher);
}
@Override
public void notifywatcher(String str) {
for(watcher watcher:list){
watcher.update(str);
}
}
}
//测试类
public class Testgcz {
public static void main(String[] args) {
cwatcher cwatcher1 = new cwatcher("订阅者1");
cwatcher cwatcher2 = new cwatcher("订阅者2");
cwatcher cwatcher3 = new cwatcher("订阅者3");
cwatchered cwatchered = new cwatchered();
cwatchered.addwatcher(cwatcher1);
cwatchered.addwatcher(cwatcher2);
cwatchered.addwatcher(cwatcher3);
cwatchered.notifywatcher("新讯息来了……");
System.out.println("____________________");
cwatchered.removewatcher(cwatcher2);
cwatchered.notifywatcher("新讯息又来了……");
}
}
//测试结果
订阅者1:新讯息来了……
订阅者2:新讯息来了……
订阅者3:新讯息来了……
____________________
订阅者1:新讯息又来了……
订阅者3:新讯息又来了……