android Observer(观察者模式)_案例祥解
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
观察者模式_OBSERVER_案例详解
1、Observer案例
在23种设计模式中,观察者模式算是模式设计中的皇后,尤其是在我们做软件设计过的过程中所体现的更是立足无穷,再说它好,还不如来个实例不是更简单明了,我就把对其概念上的讲解以注释的方式写在代码注释中,如下所示:
//首先我们需要先定义一个接口为:抽象观察者
public interface Watcher{
//再定义一个用来获取更新信息接收的方法
public void updateNotify(Content content);
}
//其次定义一个接口为:抽象被观察者
public interface Watched{
//在其接口中定义一个用来增加观察者的方法
public void add(Watcher watcher);
//再定义一个用来删除观察者权利的方法
public void remove(Watcher watcher);
//再定义一个可以实现行为变现并向观察者传输信息的方法
public void notifyWatcher(Content content);
}
//再次就是定义一个类为:具体观察者并实现其接口抽象观察者
public class ConcreteWatcher implements Watcher{
//并覆盖其方法
public void updateNotify(Content content){
int id = content.getId();
String name = content.getName();
String address = content.getAddress();
System.out.println("id:"+id++"/n name:"+name+"/n address:"+address); }
}
//最后就是定义一个类为:具体被观察者并实现其抽象接口抽象被观察者
public class ConcreteWatched implements Watched{
//定义一个List来封装Watcher
private List
//并覆盖其方法
public void add(Watcher watcher){
list.add(watcer);
}
public void remove(Watcher watcher){
list.remove(watcher);
}
public void notifyWatcher(Content content){
f or(Watcher watcher : list){
watcher.updateWatcher(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}{
= name;
}
public String getName(){
return name;
}
public void setAddress(String address){ this.address = address;
}
public String getAddress(){
return address
}
}
//测试类
public classs Test{
public static void main(String args[]){
//实例一个被观察者
W atched watched = new Watched();
//实例第一个观察者对被观察者进行观察 Watcher watcher1 = new Watcher();
//实例第二个观察者对被观察者进行观察
Watcher watcher2 = new Watcher();
//实例第三个观察者对被观察者进行观察
Watcher watcher3 = new Watcher();
//加入对其观察
watched.add(watcher1);
watched.add(watcher2);
watched.add(watchre3);
//当被观察者发生变化时:调用其信息方法Content content = new Content();
content.setId("0001");
content.setName("jiangshide");
content.setAddress("beijing");
watched.notifyWatchers(content);
//被观察者可以调用删除方法
watched.remove(watchr2);
content.setName="litian";
watched.notifyWatchers(content);
}
}