标签:array 广播 hang http tps 针对 应用 模块 乌龟
本文选择的是基于观察者模式的案例分析,观察者模式属于23模式下的一种,在Java编程中有较广泛的应用。
github源码:https://github.com/colinNaive/DesignPatternAndroid.git
现在我们从类图的角度来看一下:
从上面我们可以看到,这里面包含了两大类(主题和观察者)一共四个角色:
观察者模式还是比较简单的,就是一个粉丝关注明星的实例。现在代码来实现一下。
首先是一个Subject类的父类,它实现了维护装有观察者引用集合的功能。
public class Subject { //保存注册的观察者对象 private List<Observer> mObervers = new ArrayList<>(); //注册观察者对象 public void attach(Observer observer) { mObervers.add(observer); Log.e("SZH", "attach an observer"); } //注销观察者对象 public void detach(Observer observer) { mObervers.remove(observer); Log.e("SZH", "detach an observer"); } //通知所有注册的观察者对象 public void notifyEveryOne(String newState) { for (Observer observer : mObervers) { 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("SZH", "concreteSubject state:" + newState); //状态发生改变,通知观察者 notifyEveryOne(newState); } }
首先是一个接口,抽象出了一个及时更新的方法
public interface Observer { void update(String newState); }
接着是几个观察者对象。
public class ObserverA implements Observer { //观察者状态 private String observerState; @Override public void update(String newState) { //更新观察者状态,让它与目标状态一致 observerState = newState; Log.e("SZH", "接收到消息:" + newState + ";我是A模块,快来抢吧!!"); } } public class ObserverB implements Observer { //观察者状态 private String observerState; @Override public void update(String newState) { //更新观察者状态,让它与目标状态一致 observerState = newState; Log.e("SZH", "接收到消息:" + newState + ";我是B模块,快来抢吧!!"); } } public class ObserverC implements Observer { //观察者状态 private String observerState; @Override public void update(String newState) { //更新观察者状态,让它与目标状态一致 observerState = newState; Log.e("SZH", "接收到消息:" + newState + ";我是C模块,快来抢吧!!"); } }
观察者模式由抽象主题(Subject)角色、具体主题(Concrete Subject)角色组成。通过抽象主题和具体主题可实现多态,当主题未标注时使用默认主题通知,在具体主题时通过多态来进行动态添加通知。
抽象主题(Subject)角色:
把所有对观察者对象的引用保存在一个集合中,每个抽象主题角色都可以有任意数量的观察者。抽象主题提供一个接口,可以增加和删除观察者。一般用接口或抽象类来实现抽象主题角色。
抽象观察者(Observer)角色
为具体的观察者定义一个更新接口,在得到主题的通知时更新自己。
具体主题(Concrete Subject)角色
在具体主题内部状态改变时,给所有登记过的观察者发出通知。是抽象主题的子类(或实现)。
具体观察者(Concrete Observer)角色
该角色实现抽象观察者角色所要求的更新接口,以便本身的状态与主题的状态相协调。如果需要,具体观察者角色可以保存一个指向具体主题角色的引用。
观察者模式的让我们知道了在设计开发的时候一定要“多用组合,少用继承”。
我们设计开发是应该是针对接口变成,而不针对实现编程。
这是一种创建松散耦合代码的技术。它定义对象间 一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都将得到通知。由主体和观察者组成,主体负责发布事件,同时观察者通过订阅这些事件来观察该主体。主体并不知道观察者的任何事情,观察者知道主体并能注册事件的回调函数。
标签:array 广播 hang http tps 针对 应用 模块 乌龟
原文地址:https://www.cnblogs.com/weihong775/p/12009929.html