观察者设计模式

观察者设计模式需要以下两个程序类和接口:

  • 观察者:Observer接口,该类有一个方法update,当该方法执行后,观察者就会进行相应的响应。
  • 被观察者: Observable类。

范例:实现观察者的一个完整的例子

一群人关注着房价,当房价下跌的时候,不会接到通知,也就不会进行反馈;而一旦房价上升,他们就会被“被观察者”唤醒,从而检测到更新,并进行对应的反馈。

import java.util.Observable;
import java.util.Observer;

/***
 * 实现一个观察者模式的示例代码
 */
class Person implements Observer{   // 实现观察者

    @Override
    public void update(Observable o, Object arg) {  //两个参数分别代表:被观察者实例,被观察者通知观察者,变更的内容是什么?
        if(o instanceof House){  //如果接到的是被观察者的通知
            System.out.println("【已经观察到了房价的上涨】,新价格为:"+arg);
        }
    }
}

class House extends Observable{  //实现被观察者
    private double price;

    public House(double price) {
        this.price = price;
    }

    public double getPrice() {
        return price;
    }

    public void setPrice(double price) {   //当房价上涨,刷新对观察者的更新
        if(price>this.price){
            super.setChanged();
            super.notifyObservers(price);   // 把最新的观察者内容发送过去,通知到观察者
        }
        this.price = price;
    }
}
public class ObserverDemo {
    public static void main(String args[]){
        // 创建几个观察者对象实例
        Person perA = new Person();
        Person perB = new Person();
        Person perC = new Person();

        //创建一个被观察者对象实例
        House house = new House(30000.00);
        //绑定观察者和被观察者之间的关系
        house.addObserver(perA);
        house.addObserver(perB);
        house.addObserver(perC);

        // 设置观察的触发条件
        System.out.println("=============房价下跌,不会通知观察者的....========================");
        house.setPrice(24000.00);
        System.out.println("=============房价上涨,观察者能够检测到更新并进行输出反馈....========================");
        house.setPrice(34000.00);
    }
}

上述实例的输出信息为:

观察者设计模式_第1张图片
观察房价的涨跌

总结

这里的观察者模式是JDK1.0开始就提供的一种设计模式的实现,现在的开发中很少使用了。但是,作为一种很好的设计模式思路,可以帮助我们进行设计模式的入门和理解。

你可能感兴趣的:(观察者设计模式)