Android设计模式与应用场景

文章目录

    • Android 设计模式
      • 1.设计模式的分类
        • 1.1 创建型模式(5种)
          • [单例模式] :
          • [抽象工厂模式]:
          • [工厂方法模式]:
          • [原型模式]:
          • [建造者模式]:
        • 1.2 结构型模式(七种)
          • [桥接模式]:
          • [代理模式] :
          • [组合模式]:
          • [适配器模式] :
          • [享元模式] :
          • [装饰者模式] :
          • [外观模式] :
        • 1.3行为型模式(11种)
          • [访问者模式] :
          • [策略模式]:
          • [备忘录模式] :
          • [观察者模式]:
          • [模板模式]:
          • [迭代器模式] :
          • [状态模式] :
          • [命令模式]:
          • [中介者模式]:
          • [解释器模式] :
          • [责任链模式] :
      • 常见问题:
        • 装饰器模式和代理模式的区别
      • Android开发过程中常用设计模式
      • 参考链接:

Android 设计模式

设计模式的目的只有一个,降低对象之间的耦合,增强程序的复用性、拓展性、维护性

1.设计模式的分类

设计模式一般分为三类:创建型模式、结构型模式、行为型模式

1.1 创建型模式(5种)

(口诀:单抽工建原)

用来创建对象的。一共有五种:单例模式、原型模式、建造者模式、工厂方法模式、抽象工厂模式、。

[单例模式] :

确保某一个类只有一个实例,并且提供一个全局访问点。

[抽象工厂模式]:

创建多个产品族中的产品对象。

[工厂方法模式]:

定义:让子类来决定要创建哪个对象;适用于一系列、大批量的对象生产。

示例:创建线程池的时候(Executors.newCachedThreadPool(); ),直接在Executors工厂类中选择一种我们需要的套餐就可以了。 还有BitmapFactory位图工厂,专门用来将指定的图片转换为指定的位图Bitmap。

[原型模式]:

​ 定义:通过复制原型来创建新对象。

​ 示例:Java中所有对象都有的一个名字叫clone的方法,已经原型模式的代名词了

[建造者模式]:

定义:用来创建复杂的复合对象。

示例:OkHttpClient、Retrofit的初始构建 或者Dialog


1.2 结构型模式(七种)

口诀:桥代理组合适配器,享元回家装饰外观

解释:有个姓代理组装适配器,他儿子享元拿回家装饰外观去啦

结构型模式主要是用于处理类或者对象的组合。一共有七种:代理模式(委托)、适配器模式、装饰模式、外观模式、桥接模式、组合模式、享元模式。

[桥接模式]:

定义:将两个能够独立变化的部分分离开来。

示例:AbsListViewListAdapter之间就是一个桥接模式。WindowWindowManager 之间也是桥接模式。

[代理模式] :

定义:控制客户端对对象的访问。 示例:ActivityManagerProxy 这个代理类

[组合模式]:

将整体与局部(树形结构)进行递归组合,让客户端能够以一种的方式对其进行处理。

示例:ViewGroupView就是典型的组合模式

[适配器模式] :

定义:将原来不兼容的两个类融合在一起。

示例:ListView每一项的布局和数据都不一样,但是最后输出都可以看作是一个View。 可参考二

[享元模式] :

使用对象池来减少重复对象的创建。

示例:Message.obtainMessage通过重用Message对象来避免大量的Message对象被频繁的创建和销毁。

[装饰者模式] :
Decorator

定义:为对象添加新功能,同时又不改变其结构。注:继承也可以对现有对象进行拓展,但java是单继承,如果你多级包装,层级就会很复杂。

示例:ContextWrapper,通过包装ContextImpl来实现拓展,保证了ContextImpl的原始特性。然后通过ContextWrapper的多态实现,生成组件Activity、Service、Application。 参考

[外观模式] :

定义:对外提供一个统一的接口用来访问子系统。

示例:比如Context类,里面封装了很多方法,以startActivity为例;实际上startActivity()是通过ActivityManagerService来实现的。但是实际开发中一般都用不到,通过封装的方式,Context类隐藏了这些细节,我们只要简单调个方法就可以启动一个新的Activity

1.3行为型模式(11种)

口诀:访问者写好策略备忘录,观察模板迭代的状态,命令中介解释责任链

解释:看房子的经过

行为型模式主要是描述类或者对象是怎样交互和怎样分配职责的。一共有十一种:策略模式、模板方法模式、观察者模式、迭代器模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。

[访问者模式] :

稳定数据结构中,定义新的操作行为。[用的比较少]

[策略模式]:

定义:封装不同的算法,算法之间能互相替换。

示例:ListView需要设置一个Adapter,而这个Adapter根据我们实际的需求可以用ArrayAdapterSimpleAdapter等等,这里就运用到策略模式。

[备忘录模式] :

定义:保存对象的状态,在需要时进行恢复。

示例:Activity的onSaveInstanceState和onRestoreInstanceState就是通过Bundle这种序列化的数据结构来存储Activity的状态,至于其中存储的数据结构,这两个方法不用关心。

[观察者模式]:

定义:状态发生改变时通知观察者,一对多的关系。

示例: 点击事件,RxJava、EventBus 都是观察者模式。 List参考[策略模式]

[模板模式]:

定义:定义一套流程模板,根据需要实现模板中的操作;抽象父类,具体子类

示例:BaseActivity 里面的封装,定义了抽象的initView、initLayout、initData()等模块

[迭代器模式] :

定义:提供一种方法顺序访问一个聚合对象中的各个元素。

示例:各种数据结构体,如List,Map,等包含的迭代器以外,数据库查询使用Cursor,实际上就是一个具体的迭代器

[状态模式] :

定义:根据不同的状态做出不同的行为。

例子: 常见的应用在登录系统,在已登录和未登录的情况下,对于同一个点击事件的响应行为是不一样的。比如转发功能。 参考[状态模式]

[命令模式]:

把请求封装成一个对象命令发送出去,方便定制、排队、取消。

示例:Handler.post后Handler.handleMessage。

[中介者模式]:

定义:将网状结构转变为星型结构,所有行为都通过中介。

示例:比如MVP,中的P也可以看作是一个中介者。可以在多个Activity引用,同时也可以调用多个M层的访问

[解释器模式] :

定义:定义语法,并对其进行解释。

示例:PackageParser这个类对AndroidManifest.xml这个配置文件的解析过程,

[责任链模式] :

定义:一个请求发送到接收者,接收者组成链式结构,沿着链式结构传递请求,直到有对象处理请求。
示例:1、Okhttp可以针对请求配置很多拦截器,而这些拦截器正是通过责任链模式链接起来,并最终返回处理的结果。 2、事件分发机制用到的也是责任链 3、项目启动的时候的多种弹框(更新、引导、协议、权限)

常见问题:

装饰器模式和代理模式的区别

  • 1、装饰器模式关注于在一个对象上动态地添加方法,而代理模式关注于控制对对象的访问。
  • 2、使用场景不一样,比如ContextWrapper 、ContextThemeWrapper可以层层增加功能,而代理模式则一般是用于增加特殊的功能,有些动态代理不支持多层嵌套

Android开发过程中常用设计模式

单例、构建者(Dialog)、适配器(ListView与Adapter)、模板模式(BaseActivity)、观察者模式(点击事件,RxJava、EventBus)

参考链接:

一句话总结23种设计模式

Android中常用的设计模式与应用场景

设计模式-速记口诀

装饰者模式

工厂模式

策略模式

状态模式

你可能感兴趣的:(Android,设计模式)