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







原创粉丝点击