设计模式之观察者模式
观察者模式:
通过字面意思,可以知道观察,监视着某个变量,及时的知道变量是否已变。
观察者模式就是对类Observable 和 接口 Observer的使用。
直接上代码:
设置一个Person类,继承Observable,作为被观察者。
public class Person extends Observable{
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
setChanged();
notifyObservers();
}
}
说明:对person的名字进行观察,如果发生改变了,立马的进行通知,setChanged() notifyObservers()两个方法就是用来实现通知的功能。
设置一个观察者,这个需要实现Observer接口来实现:我将一个TextView来实现的
public class MyTestView extends TextView implements Observer{
public MyTestView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
public MyTestView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public MyTestView(Context context) {
super(context);
}
private static int number = 0;
@Override
public void update(Observable observable, Object data) {
setText("数据改变了呗" + number);
number ++ ;
}
可以看出,我是想通过Person只要名字已改变,我就更改TextView中的显示内容。
看一下主类:
public class MainActivity extends ActionBarActivity {
private Person test;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
MyTestView text = (MyTestView) findViewById(R.id.text);
test = new Person();
test.addObserver(text); //将观察者添加到被观察者中
Button change = (Button) findViewById(R.id.change);
change.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
test.setName("hahah"); //通过点击事件来改变Person对象中name的值。
}
});
}
} 这就是观察者模式最简单的实现了。