本文共 3235 字,大约阅读时间需要 10 分钟。
观察者模式常用于只要改变一个内容,其他的一个或多个内容也会随之改变。
例如需求:公司行政通知开会,领导需要准备发言,秘术做好会议记录,员工需要认真听讲。 这种需求使用观察者模式实现最合理。 观察者模式实现有两种方式, 方式一、使用Api直接提供的接口,我们只要实现它即可。 方式二、自定义一个观察者接口、被观察着接口、被观察者主体、观察者主体。方式一简单代码实现:
1、定义被观察者类,继承Observable 需要观察的对象public class MeetingObservable extends Observable { public void startMeeting(String msg){ setChanged(); notifyObservers(msg); }}
2、定义观察者类,实现Observer接口
当需要观察的对象发生改变是,观察者需要作出的变化。public class SecretaryObserver implements Observer { @Override public void update(Observable observable, Object o) { Log.d("Secretary","接收到会议指令 "+o.toString() + " 秘术记录会议内容"); }}public class LeadObserver implements Observer { @Override public void update(Observable observable, Object o) { Log.d("Lead",o.toString() + " 领导发言 "); }}public class EmployeeObserver implements Observer { @Override public void update(Observable observable, Object o) { Log.d("Employee",o.toString() + " 员工听讲"); }}
3、使用方法
private void test(){ MeetingObservable observable = new MeetingObservable(); SecretaryObserver secretary = new SecretaryObserver(); LeadObserver lead = new LeadObserver(); EmployeeObserver employee = new EmployeeObserver(); observable.addObserver(secretary); observable.addObserver(lead); observable.addObserver(employee); observable.startMeeting("开始会议"); }
方式二简单实现
1、定义观察者接口 用来更新观察者对象public interface MyObserver { public void upDate(Object object);}
2、定义被观察者接口
public interface MyObservable { public void addObserver(MyObserver observer); public void delObserver(MyObserver observer); public void delObservers(); public void notifyObserver(Object object);}
3、定义被观察者主体
该方法主要用于添加、删除观察者,以及通知各个观察者进行更新。public class Meeting implements MyObservable{ ListmList = new ArrayList<>(); @Override public void addObserver(MyObserver observer) { if (observer != null){ mList.add(observer); } } @Override public void delObserver(MyObserver observer) { if (observer != null){ mList.remove(observer); } } @Override public void delObservers() { if (mList != null && mList.size() > 0){ mList.clear(); } } @Override public void notifyObserver(Object object) { for (MyObserver observer : mList){ observer.upDate(object); } }}
4、定义观察者主体
实现观察者接口,实现各个观察者接收到通知消息后需要进行的操作。public class Employee implements MyObserver { @Override public void upDate(Object object) { Log.d("employee", object.toString() + " 各位员工注意听讲"); }}public class Manager implements MyObserver { @Override public void upDate(Object object) { Log.d("manager", object.toString() + " 领导讲话 "); }}
5、使用方法
private void test(){ Meeting meeting = new Meeting(); Manager manager = new Manager(); Employee employee = new Employee(); meeting.addObserver(manager); meeting.addObserver(employee); meeting.notifyObserver("员工大会现在开始"); //使用完毕之后需要消除观察者 meeting.delObservers(); }
转载地址:http://hnsvi.baihongyu.com/