*本篇文章已授权微信公众号 guolin_blog (郭霖)独家发布
原创文章,转载请注明 ( 来自:http://blog.csdn.net/tiefeng0606/article/details/51499199 IZZY的博客 )
前文写过BroadCastReceiver的源码的分析BroadcastReceiver源码解析(二),文章很长终于把广播的注册和发送流程详细的分析了一遍。最近用RationalRose画了画它的类图,于是将BroadCastReceiver中涉及的设计模式分析分析,准备再扒一层。
由于技术水平有限,研究了BroadCastReceiver的过程中,目前只发现涉及到了三种设计模式,分别为观察者,代理和适配器模式。
一,观察者模式
观察者模式类图:
类图完了,下面是具体的代码实现:
//定义观察者接口
public interface Observer {
public void update(String s);
}
//定义主题接口
public interface Subject {
public void regist(Observer observer);//定义注册观察者方法
public void unRegist(Observer observer);//定义反注册观察者方法
public void notifyObserver(String s);//通知观察者消息
}
//主题的实现类
public class ConcreteSubject implements Subject{
//定义一个集合,存放注册进来的观察者对象
private ArrayList< Observer> mList=new ArrayList<Observer>();
public void regist(Observer observer) {
mList.add(observer);
}
public void unRegist(Observer observer) {
mList.remove(observer);
}
//遍历集合,逐个调用其update方法更新数据
public void notifyObserver(String s) {
for(int i=0;i<mList.size();i++)
{
mList.get(i).update(s);
}
}
}
//1号观察者,实现了观察者类
public class ConcreteObserver1 implements Observer {
public ConcreteObserver1(Subject subject) {
subject.regist(this)