观察者模式的思想是有一个目标对象,这个对象发生了变化时,所以关心他变化的对象都会被通知到。下面是个典型的消息通信的例子:
package com.jerry.design.observer;
import java.util.ArrayList;
import java.util.List;
// 测试类
public class Test {
public static void main(String[] args) {
//消息提供者
Message m = new Message();
//消息消费者
Consumer c1 = new Consumer("c1");
Consumer c2 = new Consumer("c2");
Consumer c3 = new Consumer("c3");
//注册消费者
m.attach(c1);
m.attach(c2);
m.attach(c3);
//生产消息
m.setContent("我生产消息了!");
}
}
interface Oberver{
public void update(Subject subject);
}
class Consumer implements Oberver{
private String name;
@Override
public void update(Subject subject) {
System.out.println("消息:"+((Message)subject).getContent()+"被"+name+"消费了");
}
public Consumer(String name) {
super();
this.name = name;
}
}
class Subject{
private List<Oberver> consumers = new ArrayList<Oberver>();
public void attach(Oberver consumer){
consumers.add(consumer);
}
public void detach(Oberver consumer){
consumers.remove(consumer);
}
protected void notifyObervers(){
for(Oberver oberver:consumers){
oberver.update(this);
}
}
}
class Message extends Subject{
private String content;
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
notifyObervers();
}
}