Volley,核心架构生产者消费者模式
晚上母亲做烙饼,熟了就放到桌子上,我和姐看到桌子上有饼就拿来吃,没了就等着。这就是生产者消费者模式。
母亲 生产者 做饼
桌子 产品容器 放饼
我和我姐 消费者 吃饼
生产者消费者模式是通过一个容器来解决生产者和消费者的强耦合问题。生产者和消费者彼此之间不直接通讯,而通过阻塞队列来进行通讯,所以生产者生产完数据之后不用等待消费者处理,直接扔给阻塞队列,消费者不找生产者要数据,而是直接从阻塞队列里取,阻塞队列就相当于一个缓冲区,平衡了生产者和消费者的处理能力。
volley核心架构生产者消费者。
从使用者这一侧,我们只需要一个RequestQueue来放入请求,一旦请求放入了队列,首先会判断是否需要缓存,如果说这个请求明确不要缓存,就直接进入NetworkQueue,如果没有明确不缓存,则进入CacheQueue(换句话说就是,非特殊指定的请求默认都会缓存)。CacheDispatcher拿到Request后进入Cache检查,如果未命中Cache,则CacheDispatcher会把这个Request移到NetworkQueue中。NetworkDispatcher则从NetworkQueue中取出Request,然后进行网络请求。两种Dispatcher通过ResponseDelivery将结果传递回Request的回调(Listener)中。如图
这样理解,还是烙饼现在有两张桌子一个是给我的 一个是给我姐的,母亲把烙的饼先放我桌上,我挑选后把不好吃的放我姐桌上。
Volley 还使用了策略模式
当Android SDK小于9时,基于HttpClient创建HttpStack,否则基于HttpURLConnection创建HttpStack
模板模式
在Volley中对于Request的设计用到的就是模板方法模式。volley提供了很多子类Image,String,JsonObject还有JsonArray。
唯一的区别就是对返回数据的解析方式不同,如果我们就可以通过模板方法模式对解析方式进行抽象,让子类分别实现,
这样如果有新的对象返回需要解析,只要新增子类实现对返回数据的解析方式就可以实现功能拓展。