hand first設計モード--オブザーバーモード


Java apiによるオブザーバーモードの実行
1.プッシュ・モード(すべての観察者に同じデータがトピックによって生成される)
テーマ
public class WeacherData extends Observable {
	
	private int data1;
	
	private int data2;
	
	
	public void update(){
	    this.setChanged();
	    //   WeacherData              
             this.notifyObservers(this);
	}

	public int getData1() {
		return data1;
	}

    public int getData2() {
		return data2;
	}
    
    public void setData(int data1,int data2){
    	this.data1 = data1;
    	this.data2 = data2;
    }

}

観察者
public class ClientData implements Observer {
	Observable obser;
	private int data1;
	
	private int data2;
	
	
    public 	ClientData(Observable obser){
    	this.obser = obser;
    	obser.addObserver(this);
    	
    }

	@Override
	public void update(Observable o, Object arg) {
		// TODO Auto-generated method stub
		if(o instanceof WeacherData ){
			WeacherData w = (WeacherData)arg;
			//data = w.getData1();
			data1 = w.getData1();
			data2 = w.getData2();
			display();
		}

	}
	
	public void display(){
		System.out.println("data1 is "+data1+" and data2 is "+data2);
	}

}

2.プルモード(観察者によって所望のデータを選択的に取得)

public class WeacherData extends Observable {
	
	private int data1;
	
	private int data2;
	
	
	public void update(){
	    this.setChanged();
	    //          
             this.notifyObservers();
	}

	public int getData1() {
		return data1;
	}

    public int getData2() {
		return data2;
	}
    
    public void setData(int data1,int data2){
    	this.data1 = data1;
    	this.data2 = data2;
    }

}
public class ClientData implements Observer {
	Observable obser;
	private int data1;
	
	private int data2;
	
	
    public 	ClientData(Observable obser){
    	this.obser = obser;
    	obser.addObserver(this);
    	
    }

	@Override
	public void update(Observable o, Object arg) {
		// TODO Auto-generated method stub
		if(o instanceof WeacherData ){
			WeacherData w = (WeacherData)o;
			 //       ,       
                            data1 = w.getData1();
			//data2 = w.getData2();
			display();
		}

	}
	
	public void display(){
		System.out.println("data1 is "+data1+" and data2 is "+data2);
	}

}

テスト
public class Test {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		WeacherData data = new WeacherData();
		
		ClientData client = new ClientData(data);
		
        data.setData(1, 2);

	}

}

注意観察はいずれも結果が無秩序であることを示す.
欠点:
トピッククラスは他のクラスを継承できません.
せっけいげんり
インタラクティブオブジェクト間の松結合の設計