关键词搜索

源码搜索 ×
×

(Java)观察者设计模式

发布2020-02-04浏览430次

详情内容

一、什么叫观察者

举个例子,比如现在很多的购房者都在关注着房子的价格变化,每当房子价格变化时,所有的购房者都可以观察得到,实际上以上的购房者都属于观察者,他们都关注着房子的价格,这就是 观察者设计模式
在这里插入图片描述
在 Java 中可以直接依靠 Observable 类和 Observer 接口实现该功能

二、观察者模式实现

需要被观察的类必须继承Observable 类:Observable 类的常用方法

在这里插入图片描述
然后每一个观察者类都需要实现 Observer 接口,Observer 接口定义如下:

public interface Observer{
	void update(Observable o,Object arg);
}

    该接口中只定义了一个 update 方法,第1个参数表示被观察者实例,第2个参数表示修改的内容。

    import java.util.Observable;
    import java.util.Observer;
    
    class House extends Observable{//被观察者的类需要继承 Observable 类
        private float price;
        public House(float price){
            this.price = price;
        }
    
        public float getPrice() {
            return price;
        }
    
        public void setPrice(float price) {
            super.setChanged();//设置变化点
            super.notifyObservers(price);//通知所有观察者价格改变
            this.price = price;
        }
        public String toString(){
            return "房子价格为:" + this.price;
        }
    }
    class HousePriceObserver implements Observer{//每一个观察者类都需要实现 Observer 接口
        private String name;
        public HousePriceObserver(String name){
            this.name = name;
        }
        public void update(Observable obj,Object arg){
            if (arg instanceof Float){//判断参数类型
                System.out.print(this.name + "观察到价格更改为:");
                System.out.println(((Float)arg).floatValue());
            }
        }
    }
    public class Root{
        public static void main(String[] args) {
            House h = new House(10000);
            HousePriceObserver hp1 = new HousePriceObserver("购房者A");
            HousePriceObserver hp2 = new HousePriceObserver("购房者B");
            HousePriceObserver hp3 = new HousePriceObserver("购房者C");
            h.addObserver(hp1);//加入观察者
            h.addObserver(hp2);//加入观察者
            h.addObserver(hp3);//加入观察者
            System.out.println(h);//输出房子价格
            h.setPrice(66666);//修改房子价格
            System.out.println(h);//输出房子价格
        }
    }
    
      4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48

    在这里插入图片描述
    可以发现多个观察者都在关注着价格的变化,只要价格一有变化,则所有观察者会立刻有所行动。

    相关技术文章

    点击QQ咨询
    开通会员
    返回顶部
    ×
    微信扫码支付
    微信扫码支付
    确定支付下载
    请使用微信描二维码支付
    ×

    提示信息

    ×

    选择支付方式

    • 微信支付
    • 支付宝付款
    确定支付下载