e2

滴滴侠,fai抖

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

具体主题类:

package observer2_mode;

import java.util.Observable;

/**
 * 具体主题类, 继承自jdk的可被观察类
 * 父类JDK已实现, 主要自带了: (1.定义: 观察者集合, 2.添加观察者, 3.移除观察者, 4.通知已注册的观察者, 5.设置变化标记)
 */
public class ConcreteSubject extends Observable{

    
    /**
     * 当作气温吧
     */
    private int state;
    
    
    /**
     * 获得气温值
     */
    public int getState() {
        return state;
    }
    
    
    /**
     * 由客户端调用, 改变气温, 并通知已注册的观察者
     */
    public void set(int state){
        this.state = state;
        setChanged();//设置变化标记, 此处不写不会通知, 底层设置true, 每次通知后, 此标记会被设为false
        notifyObservers("此处可以传任何类型的对象给观察者!");//通知已注册的观察者
    }

}

 

观察者A:

package observer2_mode;

import java.util.Observable;
import java.util.Observer;

/**
 * 观察者A, 实现了jdk的观察者接口
 */
public class ObserverA implements Observer{

    
    /**
     * 气温
     */
    private int myState;
    
    
    /**
     * 当接收到主题通知时, 执行的方法
     * 若主题未注册此观察者, 此方法不会被执行
     */
    @Override
    public void update(Observable o, Object arg) {
        this.myState = ((ConcreteSubject)o).getState();
        //Object arg, 可以是接收自主题对象发送的任何类型的对象!
    }

    
    /**
     * 获得气温值
     */
    public int getMyState() {
        return myState;
    }

}

 

测试类:

package observer2_mode;

public class Client {

    public static void main(String[] args) {
        //具体的主题对象
        ConcreteSubject subject = new ConcreteSubject();
        
        //模拟多个观察者
        ObserverA obs1 = new ObserverA();
        ObserverA obs2 = new ObserverA();
        ObserverA obs3 = new ObserverA();
        
        //主题对观察者进行登记注册
        subject.addObserver(obs1);
        subject.addObserver(obs2);
        subject.addObserver(obs3);
        
        //改变主题的状态
        subject.set(3000);
        System.out.println("-------------------------------状态修改了!");
        //我们看看,观察者的状态是不是也发生了变化
        System.out.println(obs1.getMyState());
        System.out.println(obs2.getMyState());
        System.out.println(obs3.getMyState());
        
        //改变主题的状态
        subject.set(600);
        System.out.println("-------------------------------状态修改了!");
        //我们看看,观察者的状态是不是也发生了变化
        System.out.println(obs1.getMyState());
        System.out.println(obs2.getMyState());
        System.out.println(obs3.getMyState());
    }
    
}

 

执行结果:

-------------------------------状态修改了!
3000
3000
3000
-------------------------------状态修改了!
600
600
600

 

 

谢谢声明出处!

转自: http://www.cnblogs.com/gscq073240/articles/7102697.html

 

posted on 2017-07-01 16:21  纯黑Se丶  阅读(117)  评论(0编辑  收藏  举报