简记Android源码设计模式——One

本文章以读《Android源码设计模式》后做下简记。

单例模式

介绍

单例模式可谓是都会用到的一个设计模式。单例顾名思义只有一个实例。就像规定任何时候你只能有一个老婆或直接没有老婆一样(都是泪)。Android中的LayoutInflater则使用的单例来进行访问。

UML

在这里插入图片描述

使用场景

是在全局下,需要只有该类一个实例,避免产生多个对象消耗过多的资源,如访问IO或者数据库等资源的对象。这样访问该类中变量也是唯一的。

正常情况下我们需要写线程安全的方式,避免多线程情况下还是创建了多个实例。

工厂模式

介绍

创建型设计模式之一,工厂模式,如名一样,由工厂生产产品。用它则因其扩展性,这里的工厂是抽象的概念,产品也是。比如我需要不同味道的鸭脖,不同味道又对应不同生产线,用他们相似的地方来抽象进行管理则能加强扩展性。作为管理者只需要知道有生产线和生产出的鸭脖味道。至于是由麻辣味生产线生产麻辣鸭脖,还是原味生产线生产原味鸭脖,则由实际运行的生产线和鸭脖味道而定。List和Set与Collection就是一个工厂模式的体现。Android中Activity的onCreate则是相当于一共工厂方法的。

UML

在这里插入图片描述

使用场景

在创建复杂对象的时候就需要使用它了,如有多个相似的对象创建。new就能创建的不使用工厂来处理

构建者模式

介绍

Builder模式可用于创建一个复杂对象。用户往往不知道内部情况,可以通过构建方法来精细控制构建过程。顾名思义,Build作为创建一个类的中介类,使用Builder的方法来设置要创建类中的各个需要的参数并进行构建对应的对象。Android中的AlterDialog就用到了此模式,另外像ImageLoader等也都用到了此模式。

UML

在这里插入图片描述

这是通常实际的构建者使用方式,不是经典使用UML。

使用场景

需要创建一个比较复杂的类,参数多,且很多参数都有默认值的时候。

策略模式

介绍

在执行某个功能的过程当中,因传入实际对象不同,最后达到的另外一种效果的目的。策略策略,则代表执行策略,换一个对象使用那么执行的策略则产生了变化,达到的效果则发生变化。此模式代表了高度可替换,也是一个加强了扩展性的模式。

往往我们为达到不同效果,常常使用if-else来使用,这种硬编码如果算法多复杂,增加修改起来则变得容易犯错误且臃肿,就有了这个模式的诞生。Android中动画的插值器即用到了此模式

UML

[外链图片转存失败(img-ItVA0VSq-1566476269749)(http://owfb8j78q.bkt.clouddn.com/Stratey.png)])

由图即可知道,依赖的是接口(也可为抽象类)。通过在相同行为抽象的下有具体不同的实现策略,从而达到很好的扩展性。

使用场景

  • 针对同一个问题有多种处理方式,仅仅具体行为有差别
  • 需要安全分装多种同一类型操作的时候
  • 出现同一抽象有多个子类又需要使用if-else来选择具体子类的时候

状态模式

介绍

状态模式和策略模式有相似之处,看的角度不同则就成了另外一种模式。比如遥控器遥控电视,开电源和关电源带两个状态,其中带来也各个操作响应不同。如果你看在电源的角度,则就是状态模式,如果你是在执行行为角度,则就可以说是一个策略模式。当然还是各有各的使用场景,状态模式是平行不可替换的。策略模式是平行独立可替换的。意图在一个对象内部状态改变的时候,其行为也跟着改变。Android中的Wifi的使用就用到了此模式

UML

在这里插入图片描述

使用场景

  • 类行为取决于它的一个状态,且必须在运行时根据状态改变它的行为。
  • 代码中包含大量if-else,switch-case这样的结构且这些分之依赖于对象的状态。

观察者模式

介绍

目前正火的Rx系列则是将此模式发挥得淋漓尽致。该模式使用率非常高。常用GUI系统,订阅发布等,这个模式重要作用就是解偶。常常使用传入listener接口做监听就是一个观察者的体现。书中说到定义对象间一对多的依赖关系,当对象状态改变的时候,所有依赖它的对象都会得到通知并自动更新。其值这就发布订阅关系,观察者和被观察者关系。Android每个人都会用到的Adapter则用到了该模式了

UML

在这里插入图片描述

使用场景

  • 关联行为场景,关联行为可拆分,非聚合关系
  • 事件多级触发场景
  • 跨系统消息交换,如消息队列、事件总线的处理机制

原型模式

介绍

原型模式是一个创建型模式,用于创建复杂的或者构造耗时的实例。其实现方式则是使用“克隆”,复制一个已存在的实例可以提高运行效率嘛,被复制的对象就被称为原型。通常我们使用实现Cloneable接口调用clone来实现拷贝(不一定非要实现),再结合深拷贝和浅拷贝进行处理。在Android中Intent有使用到此模式

注意:拷贝不一定比new快,所以需要评估测试再考虑是否不用new

UML

在这里插入图片描述

使用场景

  • 类初始化消耗资源大,包括数据,硬件等资源,通过原型的拷贝避免这些消耗
  • new对象的时候,要非常复杂的准备和或者访问权限等
  • 一个对象需要提供给多个对象文芳,各个调用对象都可能改变其值,这里就需考虑用原型模式做保护性拷贝。

责任链模式

介绍

责任链模式是行为型设计模式之一。链则代表链式调用,采用链式调用方式,让调用者和处理者解偶。比如android中的有序广播,谁处理了后调用abortBroadcast()就可以终止了。不用说Android中的有序广播就用到了此模式了

UML

在这里插入图片描述

使用场景

  • 多个对象都可以处理同一个请求,但是由哪个对象处理在运行时决定
  • 请求处理这不明确的情况下向多个对象中的一个提交请求
  • 需要动态指定一组对象处理请求

代理模式

介绍

代理代理,就是找个中间人来做代理处理某件事。不过读了该书后感觉挺坑的,说好的代理,只是暴露出相对客户端来说,实际执行的,还是直接人,泪奔。不过它的目的不是帮你执行,而是代理控制对象的访问。这个模式是个编程好帮手,使用时候多多的,Android源码中,我们一直都有接触到到AMS的使用就用到了代理模式

UML

在这里插入图片描述

使用场景

  • 如果无法或者不想直接访问某个对象
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值