• 观察者模式


    package guanchazhe.cn;
    
    import java.util.Observable;
    import java.util.Observer;
    
    /*
     * 观察者模式:很多购房者都在关注房价的变化,每当房价发生变化时,所有的购房者都可以看到
     * 实现方式:
     * 被观察者 必须继承 observable 类, observable 类的常用方法:
     *  void    addObserver(Observer o) 
              如果观察者与集合中已有的观察者不同,则向对象的观察者集中添加此观察者。
         void    deleteObserver(Observer o) 
              从对象的观察者集合中删除某个观察者。
         void    deleteObservers() 
              清除观察者列表,使此对象不再有任何观察者。
        void    notifyObservers() 
              如果 hasChanged 方法指示对象已改变,则通知其所有观察者,并调用 clearChanged 方法来指示此对象不再改变。
         void    notifyObservers(Object arg) 
              如果 hasChanged 方法指示对象已改变,则通知其所有观察者,并调用 clearChanged 方法来指示此对象不再改变。
    p    protected  void    setChanged() 
              标记此 Observable 对象为已改变的对象;现在 hasChanged 方法将返回 true。
              
              
              观察者必须实现 Observer 接口,Observer 接口定义如下:
              public interface Observer{
              public void update(Observable o,Object arg)
              }
              
     */
    //被观察者类
    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;
        }
        
    }
    //观察者类
    class HousePriceObserver implements Observer{
        //观察者姓名
        private String name;
        public HousePriceObserver(String name) {
            super();
            this.name = name;
        }
    
        //实现update方法
        public void update(Observable o,Object arg){
            //判断参数类型
            if (arg instanceof Float) {
                System.out.println(this.name+"观察到的价格变化为");
                System.out.println(((Float) arg).floatValue());
            }
        }
        
    }
    public class OberserableDemo {
        public static void main(String[] args) {
            //被观察着对象
            House hs =new House(1000f);
            //添加观察者
            hs.addObserver(new HousePriceObserver("观察者A"));
            hs.addObserver(new HousePriceObserver("观察者B"));
            hs.addObserver(new HousePriceObserver("观察者C"));
            System.out.println("房子的价格是:"+hs.getPrice());
            hs.setPrice(600f);
            //System.out.println("现在房子的价格是:"+hs.getPrice());
            
        }
    
    }
  • 相关阅读:
    ACM-ICPC 2018 徐州赛区网络预赛 J. Maze Designer (最大生成树+LCA)
    ACM-ICPC 2018 沈阳赛区网络预赛 F. Fantastic Graph (上下界网络流)
    ACM-ICPC 2018 沈阳赛区网络预赛 G. Spare Tire (容斥原理)
    HDU 3081 Marriage Match II (二分+并查集+最大流)
    ISAP模板
    POJ
    青春
    登高有感
    那年今日
    NOIP200101数的计算
  • 原文地址:https://www.cnblogs.com/yuanyuan2017/p/6944764.html
Copyright © 2020-2023  润新知