今天主要记一下自己的一个简单的观察者模式demo,现在只是练习。还没有用到实战项目中,先记录下来方便自己后期查看吧。
就是一个点击按钮后,运用观察者模式更新另外一个textView的demo,等我把观察者模式正式运用到到项目中时,再来正式更新这篇blog
MainActivity:
public class MainActivity extends ListActivity {
private Button btnObservable;
private TextView btnObserver;
Message message = new Message();
User user;
Looker looker;
private Handler handler = new Handler() {
public void handleMessage(android.os.Message msg) {
switch(msg.what){
case 1:
btnObserver.setText("name: "+looker.getMyName());
break;
default:
break;
}
};
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnObservable = (Button)findViewById(R.id.btn_observable);
btnObserver = (TextView) findViewById(R.id.btn_observer);
user = new User("lei");
looker = new Looker();
user.addObserver(looker);
btnObservable.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
user.setName("update test");
handler.sendEmptyMessage(1);
}
});
}
@Override
protected void onDestroy() {
super.onDestroy();
user.deleteObserver(looker);
}
}
观察目标:
import java.util.Observable;
//观察目标
public class User extends Observable{
private String name;
public User(String name){
this.name = name;
setChanged();
notifyObservers();
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
setChanged();
notifyObservers();
}
}
观察者:
import java.util.Observable;
import java.util.Observer;
import android.util.Log;
//观察者
public class Looker implements Observer{
private String myName;
public String getMyName() {
return myName;
}
public void setMyName(String myName) {
this.myName = myName;
}
@Override
public void update(Observable observable, Object data) {
User user = (User)observable;
this.myName = " vvv "+user.getName();
Log.i("lei", "观察者已经重置name");
}
}