Android设计模式之观察者模式
什么是观察者模式?
这种设计模式在我们日常的开发中用的比较多,所谓的观察者模式可以理解报纸的订阅模式,及你预定了报纸后,报社有更新的报纸就会及时的给你送过来。这种设计模式可以帮助我们在编写程序时候能够及时的将改变的信息传出去。
观察者模式涉及到的几个类
1,抽象的观察主题
2,具体的观察主题
3,观察者接口
4,具体的观察者
代码实现
抽象的被观察主题
public abstract class Subject {
/**
* 用来保存注册的观察着对象
*/
private ArrayList<Observer> list = new ArrayList<Observer>();
/**
* 注册观察者对象
*/
public void attach(Observer observer){
list.add(observer);
}
/**
* 删除观察者对象
*/
public void detach(Observer observer){
list.remove(observer);
}
/**
* 通知所有的注册的观察者对象,利用接口
*/
public void nodifyObserver(String newState){
for (Observer observer:list) {
observer.update("sadaf");
}
}
}
具体的被观察者主题
//state是需要更新的内容 当发生改变是调用change()方法
public class ConcreteSubject extends Subject{
//需要更新的内容
private String state;
public String getState(){
return state;
}
public void change(String newState){
state = newState;
//状态已经发生了改变,通知各个观察者
this.nodifyObserver(newState);
}
}
观察者接口
public interface Observer {
public void update(String state);
}
具体观察者
//实现Observer就要实现这个接口里面所有的方法
public class ConcreteObserver implements Observer{
private String observerState;
public void update(String state) {
// TODO Auto-generated method stub
observerState = state;
System.out.println("状态为:"+observerState);
}
}
使用
以上就是进行代码的逻辑处理,在使用的过程中我们只需要创建多个观察者对同一个事物进行观察,当这个事物发生变化的时候就会通知所有的被观察者。
public class Client {
public static void main(String[] args) {
//创建主题对象
ConcreteSubject subject = new ConcreteSubject();
//创建观察者对象
Observer observer = new ConcreteObserver();
//创建观察者对象
Observer observer2 = new ConcreteObserver();
//创建观察者对象
Observer observer3 = new ConcreteObserver();
//将观察者对象登记到主题对象上去
subject.attach(observer);
subject.attach(observer2);
subject.attach(observer3);
subject.change("nihao");
//改变主题的状态
}
}
控制台显示
数据sadaf
数据sadaf
数据sadaf
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)