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);

}

}



注意观察都显示结果是无序的.

缺点:
主题类不能再继承其他类了.

设计原则

为交互对象之间松耦合设计
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值