自己定义接口或者类来实现观察者模式
定义被观察者所具有的接口
public interface Observable {
//注册为一个观察者
public void registerObserver(Observer observer);
//取消观察者
public void removeObserver(Observer observer);
//通知所有观察者更新信息
public void notifyObservers();
}
定义具体的被观察者:杯子
public class Cup implements Observable{
//被观察者维护的一个观察者对象列表
private Vector<Observer> vector = new Vector<Observer>();
private float price;
public Cup(float price){
this.price = price;
}
public float getPrice() {
return price;
}
public void setPrice(float price) {
//修改价格时,通知所有观察者
this.price = price;
notifyObservers();
}
@Override
public void registerObserver(Observer observer) {
//注册观察者
vector.add(observer);
}
@Override
public void removeObserver(Observer observer) {
//取消观察者
vector.remove(observer);
}
@Override
public void notifyObservers() {
//实现通知所有的观察者对象
for (Observer observer:vector) {
observer.update(price);
}
}
}
定义观察者所具有的共同的接口
public interface Observer { public void update(float price);}
public class Person implements Observer{
private String name;
public Person(String name){
this.name = name;
}
@Override
public void update(float price) {
System.out.println(name+"关注的杯子的价格已更新为:"+price);
}
}
public static void main(String[] args) {
//创建一个被观察者对象
Cup doll = new Cup(3000);
//创建两个观察者对象
Person p1 = new Person("健力宝1");
Person p2 = new Person("健力宝2");
//注册成为一个观察者
doll.registerObserver(p1);
doll.registerObserver(p2);