zoukankan      html  css  js  c++  java
  • 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);			//输出房子的价格
    	}
    
    }
    
  • 相关阅读:
    jQuery小案例
    update-alternatives
    计算机网络备忘
    报文交换 (转自百度百科,方便以后复习)
    erlang supervisor simple_one_for_one实例
    erlang supervisor中启动普通的进程
    erlang四大behaviour之一gen_server(转载)
    用Doxygen+Graphviz生成函数调用流程图(转)
    selenium模块
    request模块
  • 原文地址:https://www.cnblogs.com/tonglin0325/p/5270965.html
Copyright © 2011-2022 走看看