android观察者模式初学笔记
2016-08-03 17:33
323 查看
刚刚开始学习观察者模式,写一篇博客记录下来,加深印象。
这个主题对象在状态上发生变化时,会通知所有观察者对象,让它们能够自动更新自己。
抽象观察者角色:为所有具体的观察者定义一个接口,在得到主题的通知时更新自己。
具体主题角色:在具体主题内部状态改变时,给所有登记过的观察者发出通知。具体主题角色通常用一个子类实现。
具体观察者角色:该角色实现抽象观察者角色所要求的更新接口,以便使本身的状态与主题的状态相协调。通常用一个子类实现。如果需要,具体观察者角色可以保存一个指向具体主题角色的引用。
这是观察者角色:
这是主题角色:
这是具体的观察者角色:
具体的主题角色:
点击按钮,会打印出LOG,简单的实现了观察者模式。
观察者模式 Observer
观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态上发生变化时,会通知所有观察者对象,让它们能够自动更新自己。
观察者模式的组成
抽象主题角色:把所有对观察者对象的引用保存在一个集合中,每个抽象主题角色都可以有任意数量的观察者。抽象主题提供一个接口,可以增加和删除观察者角色。一般用一个抽象类和接口来实现。抽象观察者角色:为所有具体的观察者定义一个接口,在得到主题的通知时更新自己。
具体主题角色:在具体主题内部状态改变时,给所有登记过的观察者发出通知。具体主题角色通常用一个子类实现。
具体观察者角色:该角色实现抽象观察者角色所要求的更新接口,以便使本身的状态与主题的状态相协调。通常用一个子类实现。如果需要,具体观察者角色可以保存一个指向具体主题角色的引用。
这是观察者角色:
/** * 抽象一个观察者接口 * @author Administrator * */ public interface MyWatcher { public void update(String str); }
这是主题角色:
/** * 抽象一个处理观察者的主题接口 * @author Administrator * */ public interface MyWatched { public void addWatcher(MyWatcher watcher); public void removeWatcher(MyWatcher watcher); public void notifyWatchers(String str); }
这是具体的观察者角色:
/** * 实现了观察者接口 * @author Administrator * */ public class FirstActivity extends Activity implements MyWatcher{ @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } @Override public void update(String str) { // TODO Auto-generated method stub Log.i("TAG", "观察者拿到数据1 : " + str); } } /** * 实现了观察者接口 * @author Administrator * */ public class SecondActivity extends Activity implements MyWatcher{ @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } @Override public void update(String str) { // TODO Auto-generated method stub Log.i("TAG", "观察者拿到数据 2 : " + str); } }
具体的主题角色:
/** * 实现了操作观察者的主题接口 * @author Administrator * */ public class MainActivity extends Activity implements MyWatched { private EditText editText; private MyWatcher watcher1; private MyWatcher watcher2; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //简单写了个输入框和按钮,便于测试 editText = (EditText) findViewById(R.id.editText1); Button button = (Button) findViewById(R.id.button1); watcher1 = new FirstActivity(); watcher2 = new SecondActivity(); MainActivity.this.addWatcher(watcher1); MainActivity.this.addWatcher(watcher2); button.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub String s = editText.getText().toString(); if (s==null | s.equals("")) { s = "我接收到了 "; } MainActivity.this.notifyWatchers(s); } }); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } // 存放观察者 private List<MyWatcher> list = new ArrayList<MyWatcher>(); @Override public void addWatcher(MyWatcher watcher) { // TODO Auto-generated method stub list.add(watcher); } @Override public void removeWatcher(MyWatcher watcher) { // TODO Auto-generated method stub list.remove(watcher); } @Override public void notifyWatchers(String str) { // TODO Auto-generated method stub // 自动调用实际上是主题进行调用的 for (MyWatcher watcher : list) { watcher.update(str); } } }
点击按钮,会打印出LOG,简单的实现了观察者模式。
相关文章推荐
- java/android 设计模式学习笔记(2)---观察者模式
- Android观察者模式学习笔记
- android基础笔记——Observer观察者模式
- Android笔记--我所理解的观察者模式
- 设计模式笔记(19)---观察者模式(行为型)
- 设计模式笔记(19)---观察者模式(行为型)
- 设计模式笔记之 观察者模式
- 设计模式笔记(十) —— 观察者模式
- 设计模式笔记 18. Observer 观察者模式(行为型模式)
- 步步为营 .NET 设计模式学习笔记 十二、Observer (观察者模式)
- 设计模式学习笔记1:UML统一建模语言初学
- 《Head.First设计模式》的学习笔记(3)--观察者模式
- java 设计模式学习笔记(12) - 观察者模式
- Android 学习笔记5---程序开发模式&拨号器&短信发送器小例程
- 学习笔记----------observer观察者模式
- 设计模式笔记(19)---观察者模式(行为型)
- 移动项目开发笔记(.Net下的观察者(Observer)模式)
- Head First设计模式笔记之(观察者模式)
- 设计模式笔记2(观察者模式)
- HeadFirst 设计模式学习笔记2--观察者模式