前言
只有写出来,记忆才能更深刻
观察者模式
基本结构
abstractsubject: 抽象主题类,包含添加观察者,删除观察者,更新观察者的方法
public abstract class AbstractSubject {
public abstract void addObserver(AbstractObserver abstractObserver);
public abstract void deleteObserver(AbstractObserver abstractObserver);
public abstract void updateObserver(String message);
}
concretesubject: 具体主题类,实现添加观察者,删除观察者,更新消息的方法
public class ConcreteSubject extends AbstractSubject {
private List<AbstractObserver> list;
public ConcreteSubject(){
list=new ArrayList<>();
}
@Override
public void addObserver(AbstractObserver abstractObserver) {
list.add(abstractObserver);
}
@Override
public void deleteObserver(AbstractObserver abstractObserver) {
list.remove(abstractObserver);
}
@Override
public void updateObserver(String message) {
for (int i = 0; i <list.size() ; i++) {
list.get(i).update(message);
}
}
}
abstractobserver: 抽象观察者,定义更新方法
public abstract class AbstractObserver {
public abstract void update(String message);
}
concreteobserver: 具体观察者,实现更新内容
public class AndroidObserver extends AbstractObserver {
@Override
public void update(String message) {
System.out.println("安卓系统收到信息"+message);
}
}
public class IOSObserver extends AbstractObserver {
@Override
public void update(String message) {
System.out.println("IOS系统收到信息"+message);
}
}
public class WPObserver extends AbstractObserver {
@Override
public void update(String message) {
System.out.println("WP系统收到信息"+message);
}
}
main方法调用:
//观察者模式测试方法
private static void testObserver(){
ConcreteSubject subject=new ConcreteSubject();
AndroidObserver androidObserver=new AndroidObserver();
IOSObserver iosObserver=new IOSObserver();
WPObserver wpObserver=new WPObserver();
subject.addObserver(androidObserver);
subject.addObserver(iosObserver);
subject.addObserver(wpObserver);
subject.updateObserver("赶快更新");
}
输出结果:
安卓系统收到信息赶快更新
IOS系统收到信息赶快更新
WP系统收到信息赶快更新
个人总结
观察者模式的思路在安卓中使用很广泛,类似广播,以及EventBus框架的使用等。