概念
观察者可以有多,观察一个,或者一个观察一个
在android开发中经常使用接口回调的方式来通知观察者,有个缺点就是只能去通知一个,不能通知到多个观察者,下面简单用java代码自定义一个观察者模式,重点在于思想
-----------代码----------
关于观察者模式,在android开发中经常常用到的一点,
老师发布通知给学生, 在android开发中我们常用的是 接口的回调
例如点击事件
ss.setOnclick(Onclicko) ;
缺点是同一个时间只能通知一个
为了更加清晰的认识观察者模式,下面就利用java代码 简单实现自定义一个观察者设计模式,1次改变多处收到通知
/**
*@paramargs
*/
public static void main(String[] args) {
Student1 student1 =newStudent1();
Student2 student2 =newStudent2();
Student3 student3 =newStudent3();
Teach teach =newTeach();
teach.addObserver(student1);
teach.addObserver(student2);
teach.addObserver(student3);
teach.notifyObserver("我来了");
}
}
/**
*@authorjack_tang
*/
public interface MyObserver {
//首先要有一个处理事件
public void toast(String mesg);
}
/**
*@authorjack_tang
*/
public class Teach {
ListlinkedList=newLinkedList();
//添加观察者
public void addObserver(MyObserver o){
if(o==null)return;
if(!linkedList.contains(o)){
linkedList.add(o);
}
}
//删除观察者
public void removeObserver(MyObserver o){
if(o==null)return;
if(linkedList.contains(o)){
linkedList.remove(o);
}
}
//遍历集合 通知所有观察者
public void notifyObserver(String mesg){
for(MyObserver observer :linkedList) {
observer.toast(mesg);
}
}
}
public class Student1 implements MyObserver{
public void toast(String mesg) {
System.out.println(getClass().getName()+" 收到=="+mesg);
}
}
public class Student2 implements MyObserver{
public void toast(String mesg) {
System.out.println(getClass().getName()+" 收到=="+mesg);
}
}
public class Student3 implements MyObserver{
public void toast(String mesg) {
System.out.println(getClass().getName()+" 收到=="+mesg);
}
}

网友评论