zoukankan      html  css  js  c++  java
  • 设计模式之观察者模式

    观察者模式的定义:

    定义对象间的一种一对多的依赖关系。到一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。

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

    实际上以上的购房者都属于观察者,他们都在关注着房子的价格。

     

    package com.itmyhome;
    
    import java.util.Observable;
    import java.util.Observer;
    
    class House extends Observable{  //表示房子可以被观察
    	private float price;         //房子价格
    	
    	public House(float price){
    		this.price = price;
    	}
    	
    	public float getPrice() {
    		return price;
    	}
    	
    	public void setPrice(float price) {
    		this.price = price;
    		this.setChanged();                 //每一次修改的时候都应该引起观察者的注意
    		this.notifyObservers(this.price);  //价格改变  通知观察者
    	}
    	
    }
    class Person implements Observer{
    
    	private String name;           
    	public Person(String name){   //设置每一个观察者的名字 
    		this.name = name;
    	}
    	
    	//Observer接口提供的方法 
    	public void update(Observable o, Object arg) {
    		System.out.println(this.name+",观察到价格更改为:"+arg);
    	}
    	
    	public String getName() {
    		return name;
    	}
    
    	public void setName(String name) {
    		this.name = name;
    	}
    
    	
    }
    
    public class ObserverTest {
    
    	/**
    	 * @param args
    	 */
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		House h = new House(1000000);
    		//创建观察者
    		Person p1 = new Person("购房者A");
    		Person p2 = new Person("购房者B");
    		Person p3 = new Person("购房者C");
    		
    		h.addObserver(p1);
    		h.addObserver(p2);
    		h.addObserver(p3);
    		
    		h.setPrice(100);  //房子价格改变 由100万变成了100    虽然这只是一个梦想!
    	}
    
    }
    


     输出结果为:

    购房者C,观察到价格更改为:100.0
    购房者B,观察到价格更改为:100.0
    购房者A,观察到价格更改为:100.0


     

  • 相关阅读:
    Jquery easyui datagrid 删除多行问题
    Winform 程序部署生成
    20120915
    Winform 程序部署生成
    Jquery EasyUi datagridwindowform数据问题
    eclipse快捷键大全(转)
    c/c++ 图像RGB位存储,位操作
    常用的几款在线代码转换工具
    WPF基础之路由事件一
    WPF中的依赖属性与附加属性
  • 原文地址:https://www.cnblogs.com/itmyhome/p/4131431.html
Copyright © 2011-2022 走看看