案例分析:设计模式与代码的结构特性
观察者模式:
观察者模式是软件设计模式中的一种,在此模式中,一个目标管理所有相依与它的观察者物件,并且在它本身的状态改变时主动发出通知。就像微博上的明星,当他发出一条动态时,作为他的粉丝,也就是观察者,就会接受到这一动态。所以这种模式通常被用来实现事件处理系统。
观察者模式是一种对象行为模式。它定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。在观察者模式中,主题是通知的发布者,它发出通知时并不需要知道谁是它的观察者,可以有任意数目的观察者订阅并接收通知。观察者模式不仅被广泛应用于软件界面元素之间的交互,在业务对象之间的交互、权限管理等方面也有广泛的应用。
代码示例:
//抽象的被观察者 public class Subject { private List<Observer> registedObervers = new ArrayList<>(); public void regist(Observer observer) { registedObervers.add(observer); Log.e("fff", "regist an observer"); } public void untie(Observer observer) { registedObervers.remove(observer); Log.e("fff", "untie an observer"); } public void callEveryOne(String newState) { for (Observer observer : registedObervers) { observer.update(newState); } } }
//具体的被观察者 public class ConcreteSubject extends Subject { private String state; public String getState() { return state; } public void change(String newState) { state = newState; Log.e("fff", "concreteSubject state:" + newState); callEveryOne(newState); } }
//抽象的观察者接口 public interface Observer { void update(String newState); }
//一个具体的观察者 public class Observernews implements Observer { private String observerState; @Override public void update(String newState) { observerState = newState; Log.e("fff", "received " + newState + "我是坤坤,快来打篮球吧"); } }