查看: 768|回复: 0

[Java项目交流] java设计模式--Observer(观察者)

[复制链接]
  • TA的每日心情
    无聊
    2016-12-1 15:20
  • 签到天数: 668 天

    连续签到: 3 天

    [LV.9]以坛为家II

    发表于 2015-5-13 18:50:11 | 显示全部楼层 |阅读模式
    本帖最后由 忘忧的记忆 于 2015-5-13 18:50 编辑

           /*
             * 观察者模式: 1. 主题: 也是被观察者,形象的理解成我们的报纸
             *
             * 2. 观察者      订阅报纸的人
             *
             * 对于主题而言,有很多的观察者关注主题。当主题发生变化的时候,通知相应的观察者。  
             * ex:  一份报纸(被观察者)发布后,我们报纸的订阅者知道其中的变化(观察者)  发布/订阅
             *
             * 1) JDK:
             * 2)  Nojdk:
             */

    1.   JDK 版本:
    1. package observer;

    2. import java.util.Observable;
    3. import java.util.Observer;
    4. // 观察者
    5. public class NumObserable implements Observer {


    6.         public void update(Observable o, Object arg) {
    7.                 NumObserver ob= (NumObserver)o;
    8.                 System.out.println("值改变为:" + ob.getData());
    9.         }

    10.         /**
    11.          * 观察者模式: 1. 主题: 也是被观察者,形象的理解成我们的报纸
    12.          *
    13.          * 2. 观察者      订阅报纸的人
    14.          *
    15.          * 对于主题而言,有很多的观察者关注主题。当主题发生变化的时候,通知相应的观察者。  
    16.          * ex:  一份报纸(被观察者)发布后,我们报纸的订阅者知道其中的变化(观察者)  发布/订阅
    17.          *
    18.          * 1) JDK:
    19.          * 2)  Nojdk:
    20.          */
    21.        
    22. }
    复制代码
    1. package observer;

    2. import java.util.Observable;
    3. //主题
    4. public class NumObserver extends Observable{
    5.         private int data;

    6.         public int getData() {
    7.                 return data;
    8.         }

    9.         public void setData(int data) {
    10.                 this.data = data;
    11.                 //  
    12.                 setChanged();
    13.                 notifyObservers();//  通知观察者
    14.         }
    15.        

    16. }
    复制代码
    demo:
    1. package observer;

    2. import java.util.Observable;
    3. import java.util.Observer;

    4. public class ObserverDemo {


    5.         public static void main(String[] args) {
    6.                 NumObserver number = new NumObserver();
    7.                 number.addObserver(new NumObserable());
    8.                 number.setData(1);
    9.                 number.setData(2);
    10.                 number.setData(3);

    11.         }

    12. }
    复制代码
    输出结果:
    值改变为:1
    值改变为:2
    值改变为:3






    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    站长推荐上一条 /1 下一条