Android_观察者模式简单Demo
来源:互联网 发布:网络免费学英语 编辑:程序博客网 时间:2024/06/01 08:46
总体流程:
a. 实例化被观察者(单例)
b. 被观察者添加观察者
c. 数据变化后,被观察者调用其notifyWatcher()方法,此方法内容是通知所有观察者数据改变。
d. 观察者接收到数据改变信息后的处理。
实例代码如下:
被观察者接口
public interface Watched {//在其接口中定义一个用来增加观察者的方法public void add(Watcher watcher);//再定义一个用来删除观察者权利的方法public void remove(Watcher watcher);//再定义一个可以实现行为变现并向观察者传输信息的方法public void notifyWatcher(Content content);}被观察者实现类
public class ConcreteWatched implements Watched {// 定义一个List来封装Watcherprivate List<Watcher> list = new ArrayList<Watcher>();@Overridepublic void add(Watcher watcher) {list.add(watcher);}@Overridepublic void remove(Watcher watcher) {list.remove(watcher);}@Overridepublic void notifyWatcher(Content content) {for (Watcher watcher : list) {watcher.updateNotify(content);}}}观察者接口
public interface Watcher {//再定义一个用来获取更新信息接收的方法public void updateNotify(Content content);}观察者实现类(一般用在对应的Activity直接实现Watcher即可)
public class ConcreteWatcher implements Watcher {// 并覆写其方法@Overridepublic void updateNotify(Content content) {// TODO Auto-generated method stubint id = content.getId();String name = content.getName();String address = content.getAddress();System.out.println("id:" + id + "/n name:" + name + "/n address:" + address);}}
给出数据模型Content类
public class Content {private int id;private String name;private String address;public void setId(int id) {this.id = id;}public int getId() {return id;}public void setName(String name) {this.name = name;}public String getName() {return name;}public void setAddress(String address) {this.address = address;}public String getAddress() {return address;}}
实际调用类MainActivity
public class MainActivity extends Activity implements Watcher {Handler handler = new Handler();TextView tv = null;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);tv = (TextView) findViewById(R.id.tv);doTest();}public void doTest() {// 实例一个被观察者// 使用时可使用单例,在Application中进行final Watched watched = new ConcreteWatched();////实例第一个观察者对被观察者进行观察//Watcher watcher1 = new ConcreteWatcher();////实例第二个观察者对被观察者进行观察//Watcher watcher2 = new ConcreteWatcher();////实例第三个观察者对被观察者进行观察//Watcher watcher3 = new ConcreteWatcher();////加入对其观察//watched.add(watcher1);//watched.add(watcher2);//watched.add(watcher3);watched.add(this);// 当被观察者发生变化时:调用其信息方法 Content content = new Content();content.setId(1126);content.setName("tjd");content.setAddress("suzhou");doDataChange(watched, content);//// 被观察者可以调用删除方法//watched.remove(watcher2);handler.postDelayed(new Runnable() {public void run() {Content content = new Content();content.setName("wy");content.setAddress("xuzhou");content.setId(410);doDataChange(watched, content);}}, 5000);}public void doDataChange(Watched watched, Content content) {watched.notifyWatcher(content);}@Overridepublic void updateNotify(Content content) {final String s = "mine id = " + content.getId() + " name = " + content.getName();doShowText(s);}protected void doShowText(String s) {tv.setText(s);}}
本地Demo名备忘:ObserverPattern
- Android_观察者模式简单Demo
- 观察者模式。简单demo
- Java 简单观察者模式Demo
- Android观察者模式的简单实现demo
- Android观察者模式的简单实现demo
- 观察者模式DEMO
- 观察者模式demo
- 观察者模式的一个Demo
- 观察者模式理解及demo
- java观察者模式小demo
- 简单观察者模式
- 简单观察者模式
- 观察者模式简单介绍
- 观察者模式简单例子
- 观察者模式简单总结
- 观察者模式简单介绍
- 简单理解观察者模式
- 观察者模式简单实现
- JAVA读取Oracle中的blob图片字段并显示
- AIX 磁盘管理常用命令
- IO 流读取文件时候出现乱码 文件编码格式问题 怎么转换解决方法
- django 数据库增强工具 south 的安装使用和注意事项。。。
- spoj 362
- Android_观察者模式简单Demo
- android listView 自定义布局结合CheckedTextView实现多选
- hdu2371之矩阵快速幂
- 有想法但不会写代码,凭什么让技术合伙人为你的创意打工?
- super() fails with error: TypeError “argument 1 must be type, not classobj”
- L - Farm Irrigation
- hdu 2617(水)
- TA-Lib C/C++ API文档
- poj2635