单例模式
介绍
单例模式可谓是都会用到的一个设计模式。单例顾名思义只有一个实例。就像规定任何时候你只能有一个老婆或直接没有老婆一样(都是泪)。Android中的LayoutInflater则使用的单例来进行访问。
UML
link使用场景
是在全局下,需要只有该类一个实例,避免产生多个对象消耗过多的资源,如访问IO或者数据库等资源的对象。这样访问该类中变量也是唯一的。
正常情况下我们需要写线程安全的方式,避免多线程情况下还是创建了多个实例。
工厂模式
介绍
创建型设计模式之一,工厂模式,如名一样,由工厂生产产品。用它则因其扩展性,这里的工厂是抽象的概念,产品也是。比如我需要不同味道的鸭脖,不同味道又对应不同生产线,用他们相似的地方来抽象进行管理则能加强扩展性。作为管理者只需要知道有生产线和生产出的鸭脖味道。至于是由麻辣味生产线生产麻辣鸭脖,还是原味生产线生产原味鸭脖,则由实际运行的生产线和鸭脖味道而定。List和Set与Collection就是一个工厂模式的体现。Android中Activity的onCreate则是相当于一共工厂方法的。
UML
image使用场景
在创建复杂对象的时候就需要使用它了,如有多个相似的对象创建。new就能创建的不使用工厂来处理
构建者模式
介绍
Builder模式可用于创建一个复杂对象。用户往往不知道内部情况,可以通过构建方法来精细控制构建过程。顾名思义,Build作为创建一个类的中介类,使用Builder的方法来设置要创建类中的各个需要的参数并进行构建对应的对象。Android中的AlterDialog就用到了此模式,另外像ImageLoader等也都用到了此模式。
UML
image这是通常实际的构建者使用方式,不是经典使用UML。
使用场景
需要创建一个比较复杂的类,参数多,且很多参数都有默认值的时候。
策略模式
介绍
在执行某个功能的过程当中,因传入实际对象不同,最后达到的另外一种效果的目的。策略策略,则代表执行策略,换一个对象使用那么执行的策略则产生了变化,达到的效果则发生变化。此模式代表了高度可替换,也是一个加强了扩展性的模式。
往往我们为达到不同效果,常常使用if-else来使用,这种硬编码如果算法多复杂,增加修改起来则变得容易犯错误且臃肿,就有了这个模式的诞生。Android中动画的插值器即用到了此模式
UML
image)
由图即可知道,依赖的是接口(也可为抽象类)。通过在相同行为抽象的下有具体不同的实现策略,从而达到很好的扩展性。
使用场景
-
针对同一个问题有多种处理方式,仅仅具体行为有差别
-
需要安全分装多种同一类型操作的时候
-
出现同一抽象有多个子类又需要使用if-else来选择具体子类的时候
状态模式
介绍
状态模式和策略模式有相似之处,看的角度不同则就成了另外一种模式。比如遥控器遥控电视,开电源和关电源带两个状态,其中带来也各个操作响应不同。如果你看在电源的角度,则就是状态模式,如果你是在执行行为角度,则就可以说是一个策略模式。当然还是各有各的使用场景,状态模式是平行不可替换的。策略模式是平行独立可替换的。意图在一个对象内部状态改变的时候,其行为也跟着改变。Android中的Wifi的使用就用到了此模式
UML
image使用场景
-
类行为取决于它的一个状态,且必须在运行时根据状态改变它的行为。
-
代码中包含大量if-else,switch-case这样的结构且这些分之依赖于对象的状态。
观察者模式
介绍
目前正火的Rx系列则是将此模式发挥得淋漓尽致。该模式使用率非常高。常用GUI系统,订阅发布等,这个模式重要作用就是解偶。常常使用传入listener接口做监听就是一个观察者的体现。书中说到定义对象间一对多的依赖关系,当对象状态改变的时候,所有依赖它的对象都会得到通知并自动更新。其值这就发布订阅关系,观察者和被观察者关系。Android每个人都会用到的Adapter则用到了该模式了
UML
image使用场景
-
关联行为场景,关联行为可拆分,非聚合关系
-
事件多级触发场景
-
跨系统消息交换,如消息队列、事件总线的处理机制
原型模式
介绍
原型模式是一个创建型模式,用于创建复杂的或者构造耗时的实例。其实现方式则是使用“克隆”,复制一个已存在的实例可以提高运行效率嘛,被复制的对象就被称为原型。通常我们使用实现Cloneable接口调用clone来实现拷贝(不一定非要实现),再结合深拷贝和浅拷贝进行处理。在Android中Intent有使用到此模式
注意:拷贝不一定比new快,所以需要评估测试再考虑是否不用new
UML
image使用场景
-
类初始化消耗资源大,包括数据,硬件等资源,通过原型的拷贝避免这些消耗
-
new对象的时候,要非常复杂的准备和或者访问权限等
-
一个对象需要提供给多个对象文芳,各个调用对象都可能改变其值,这里就需考虑用原型模式做保护性拷贝。
责任链模式
介绍
责任链模式是行为型设计模式之一。链则代表链式调用,采用链式调用方式,让调用者和处理者解偶。比如android中的有序广播,谁处理了后调用abortBroadcast()就可以终止了。不用说Android中的有序广播就用到了此模式了
UML
image使用场景
-
多个对象都可以处理同一个请求,但是由哪个对象处理在运行时决定
-
请求处理这不明确的情况下向多个对象中的一个提交请求
-
需要动态指定一组对象处理请求
代理模式
介绍
代理代理,就是找个中间人来做代理处理某件事。不过读了该书后感觉挺坑的,说好的代理,只是暴露出相对客户端来说,实际执行的,还是直接人,泪奔。不过它的目的不是帮你执行,而是代理控制对象的访问。这个模式是个编程好帮手,使用时候多多的,Android源码中,我们一直都有接触到到AMS的使用就用到了代理模式
UML
image使用场景
- 如果无法或者不想直接访问某个对象
网友评论