• Java观察者设计模式


    在java.util包中提供了Observable类Observer接口,使用它们即可完成观察者模式。

    多个观察者都在关注着价格的变化,只要价格一有变化,则所有的观察者会立即有所行动。

    //=================================================
    // File Name       :	Observer_demo
    //------------------------------------------------------------------------------
    // Author          :	Common
    
    import java.util.Observable;
    import java.util.Observer;
    
    // 类名:House
    // 属性:
    // 方法:
    class House extends Observable{
    	private float price;
    
    	public House(float price) {
    		super();
    		this.price = price;
    	}
    
    	public float getPrice() {
    		return price;
    	}
    
    	public void setPrice(float price) {
    		super.setChanged();   						//设置变化点
    		super.notifyObservers(price);		//通知所有观察者价格改变
    		this.price = price;		
    	}
    
    	@Override
    	public String toString() {
    		return "房子价格为:" + this.price;
    	}
    	
    }
    
    //类名:HouseObserver
    //属性:
    //方法:
    class HouseObserver implements Observer{
    	private String name;					//观察者的名字
    	
    	public HouseObserver(String name) {
    		super();
    		this.name = name;
    	}
    
    	@Override
    	public void update(Observable o, Object arg) {
    		// TODO 自动生成的方法存根
    		if(arg instanceof Float){																//判断参数类型
    			System.out.println(this.name+"观察到价格改变为");
    			System.out.println(((Float)arg).floatValue());
    		}
    	}
    	
    }
    
    //主类
    //Function        : 	Observer_demo
    public class Observer_demo {
    
    	public static void main(String[] args) {
    		// TODO 自动生成的方法存根
    		House h = new House(1000000);
    		HouseObserver ho1 = new HouseObserver("购房者1");
    		HouseObserver ho2 = new HouseObserver("购房者2");
    		HouseObserver ho3 = new HouseObserver("购房者3");
    		h.addObserver(ho1);				//加入观察者
    		h.addObserver(ho2);
    		h.addObserver(ho3);
    		System.out.println(h);			//输出房子的价格
    		h.setPrice(666);						//修改房子的价格
    		System.out.println(h);			//输出房子的价格
    	}
    
    }
    
  • 相关阅读:
    mac 界面以及界面浏览器等显示不全
    数组常用的方法总结
    工厂模式以及应用场景
    结构与布局-紧贴底部的页脚
    结构与布局-垂直居中
    vscode mac下终端code .快速打开工程文件
    javascript操作对象和集合(jquery 6)
    2018 Multi-University Training Contest 8
    2018 Multi-University Training Contest 8
    BZOJ 3196 二逼平衡树
  • 原文地址:https://www.cnblogs.com/tonglin0325/p/5270965.html
Copyright © 2020-2023  润新知