zoukankan      html  css  js  c++  java
  • 25、java中观察者模式Observable和Observer

    如果想要实现观察者模式,则必须依靠java.util包中提供的Observable类和Observer接口

    观察者设计模式

    现在很多的购房者都在关注着房子的价格变化,每当房子价格变化的时候,所有的购房者都可以观察得到。

    实际上以上的购房者就是观察者,他们所关注的房价就是被观察者

    其中要求,被观察者需要继承Observable类,观察则需要实现Observer接口

    具体实现如下

    房价的实现

     1 class House extends Observable{
     2     private double price;
     3     public House(double price){
     4         this.price=price;
     5     }
     6     public double getPrice(){
     7         return price;
     8     }
     9     public void setPrice(double price){
    10         if(this.price!=price){
    11             this.price=price;
    12             setChanged();  //标注价格已经被更改
    13             this.notifyObservers(price);  //通知观察者数据已被更改
    14         }
    15     }
    16     @Override
    17     public String toString() {
    18         return "当前房价为:"+price;
    19     }
    20 }

    购房者实现

     1 class HousePriceObserver implements Observer{
     2     private String name;
     3     public  HousePriceObserver(String name) {
     4         this.name=name;
     5     }
     6     @Override
     7     public void update(Observable o, Object arg) {
     8         //这里最好判断一下通知是否来自于房价,有可能来自其它地方
     9         if(o instanceof House){
    10             System.out.println("购物者"+name+ "观察到房价已调整为:"+arg);
    11         }
    12     }
    13 }

    运行

     1 House house=new House(10000);
     2 HousePriceObserver A=new HousePriceObserver("A");
     3 HousePriceObserver B=new HousePriceObserver("B");
     4 HousePriceObserver C=new HousePriceObserver("C");
     5 house.addObserver(A);
     6 house.addObserver(B);
     7 house.addObserver(C);
     8 System.out.println(house);
     9 house.setPrice(6000);
    10 house.setPrice(8000);

    运行结果为:

    当前房价为:10000.0
    购物者C观察到房价已调整为:6000.0
    购物者B观察到房价已调整为:6000.0
    购物者A观察到房价已调整为:6000.0
    购物者C观察到房价已调整为:8000.0
    购物者B观察到房价已调整为:8000.0
    购物者A观察到房价已调整为:8000.0

  • 相关阅读:
    MyEclipse修改Servlet模板
    AndroidStudio启动时不自动打开项目
    Android Studio启动时出现unable to access android sdk add-on list
    基础概述
    Java环境变量设置
    eclipse安装adt插件
    设置一个.exe文件开机启动
    笔记本玩游戏设置全屏
    记一次服务器病毒查杀过程:lsass.exe占用内存高
    LayUI制作日历工作记录簿
  • 原文地址:https://www.cnblogs.com/caoyc/p/4597774.html
Copyright © 2011-2022 走看看