主题角色:
public interface Subject {
void attach(Observe observe);
void remove(Observe observe);
void notifyObserver(String mess);
}
主题角色可以是抽象类或者接口来实现,它定义了一组用来操作观察者的方法。
观察者 :
public interface Observe {
void Update(String message);
}
真实观察者角色:
public class ConcreteObserver implements Observe {
private String name;
private String message;
public ConcreteObserver(String name) {
// TODO Auto-generated constructor stub
this.name = name;
}
@Override
public void Update(String message) {
// TODO Auto-generated method stub
this.message = message;
System.out.println("观察者"+name+"收到消息:"+message);
}
}
真实主题角色:
import java.util.ArrayList;
import java.util.List;
public class ConcreteSubject implements Subject {
private List<Observe> observes ;
public ConcreteSubject() {
// TODO Auto-generated constructor stub
this.observes = new ArrayList<>();
}
@Override
public void attach(Observe observe) {
// TODO Auto-generated method stub
observes.add(observe);
}
@Override
public void remove(Observe observe) {
// TODO Auto-generated method stub
observes.remove(observe);
}
@Override
public void notifyObserver(String message) {
System.out.println("被观察者发出消息。。。");
// TODO Auto-generated method stub
for (Observe observe : observes) {
observe.Update(message);
}
}
}
测试类:
public class ClientTest {
public static void main(String[] args) {
Observe observe1 = new ConcreteObserver("观察者1");
Observe observe2 = new ConcreteObserver("观察者2");
Subject subject =new ConcreteSubject();
subject.attach(observe1);
subject.attach(observe2);
subject.notifyObserver("hei");
}
}