小论设计模式及在Android中的应用

本文主要总结下几个常用的设计模式在Android中的使用。涉及到的设计模式如下:

  1. 单例模式
  2. 工厂模式
  3. 策略模式
  4. 代理模式
  5. 模板方法模式
  6. 建造者模式
  7. 外观模式

一.单例模式

1.1 模式说明

实现1个类只有1个实例化对象 & 提供一个全局访问点

1.2 作用(解决的问题)

保证1个类只有1个对象,降低对象之间的耦合度

1.3实现方式在这里插入图片描述

其中饿汉模式和静态内部内实现不需要上锁也能保证是线程安全的,主要是依赖 JVM类加载机制,保证单例只会被创建1次,即 线程安全,JVM在类的初始化阶段(即 在Class被加载后、被线程使用前),会执行类的初始化,在执行类的初始化期间,JVM会去获取一个锁。这个锁可以同步多个线程对同一个类的初始化。(单例详细请看https://www.jianshu.com/p/6e5eda3a51af)

1.4在Android中的应用

一般主要是用在工具类中,比如自己封装的SharedPreferencesManager,比如Okhttp中的okhttpclient也最好要保证全局单例,免得多次初始化浪费资源与性能,还有腾讯的bugly里面的CrashReport,CrashModule,还比如Fresco初始化,随便挑一个第三方库基本上都有单例模式,单例算得上是在Android最常见的设计模式了吧。

二.工厂模式

2.1 模式说明

工厂模式我们可以理解为负责生产对象的一个类,称为“工厂类”。

2.2 作用(解决的问题)

将创建实例的工作与使用实例的工作分开,使用者不必关心类对象如何创建,实现了解耦;
把初始化实例时的工作放到工厂里进行,使代码更容易维护。 更符合面向对象的原则 & 面向接口编程,而不是面向实现编程。

2.3实现方式

  • 简单工厂模式
  • 工厂方法模式
  • 抽象工厂模式
    (具体情况https://www.jianshu.com/p/e55fbddc071c)

1.4在Android中的应用

现在能想起来的就一个BitmapFactory。

三.策略模式

3.1 模式说明

定义一系列算法,将每个算法封装到具有公共接口的一系列策略类中,从而使它们可以相互替换 & 让算法可在不影响客户端的情况下发生变化

3.2 作用(解决的问题)

将算法的责任和本身进行解耦,使得:
算法可独立于使用外部而变化
客户端方便根据外部条件选择不同策略来解决不同问题

3.3实现方式

将一些算法封装成一个一个的类,可以任意地替换。在代码上实现同一个接口(自我感觉继承同一个抽象类也算)。

3.4在Android中的应用

比如动画里面的animation.setInterpolator(),Android中有很多不同的插值器,都实现了Interpolator接口。 然后通过setInterpolator设置给Animation。
再比如RecyclerView.setLayoutManager().

四.代理模式

4.1 模式说明

给目标对象提供一个代理对象,并由代理对象控制对目标对象的引用

4.2 作用(解决的问题)

通过引入代理对象的方式来间接访问目标对象

4.3实现方式

  • 静态代理
  • 动态代理 (主要是反射的运用)

4.4在Android中的应用

静态代理:静态代理看到的少。。
动态代理:比如组件化开发中ProxyActivity作为代理对象,通过反射动态代理其他Activity,还比如Retrofit里面的
在这里插入图片描述

五.模板方法模式

5.1 模式说明

定义一个模板结构,将具体内容延迟到子类去实现。

5.2 作用(解决的问题)

提高代码复用性
将相同部分的代码放在抽象的父类中,而将不同的代码放入不同的子类中
实现了反向控制
通过一个父类调用其子类的操作,通过对子类的具体实现扩展不同的行为,实现了反向控制 & 符合“开闭原则”

5.3实现方式

https://www.jianshu.com/p/a3474f4fee57

5.4在Android中的应用

比如封装的BaseFragment,BaseActivity,在里面定义的一些抽象方法,放在子类里面去实现。

六.建造者模式

6.1 模式说明

将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示,主要适用于一些基本部件不会变,而其组合经常变化的时候。

6.2 作用(解决的问题)

方便用户创建复杂的对象(不需要知道实现过程)
代码复用性 & 封装性(将对象构建过程和细节进行封装 & 复用)

6.3实现方式

链式调用

6.4在Android中的应用

比如AlertDialog.Builder、okhttp、retrofit初始化

七.外观模式

7.1 模式说明

通过创建一个统一的类,用来包装子系统中一个或多个复杂的类,客户端可以通过调用外观类的方法来调用内部子系统中所有方法

7.2 作用(解决的问题)

实现客户类与子系统类的松耦合,降低原有系统的复杂度
提高了客户端使用的便捷性,使得客户端无须关心子系统的工作细节,通过外观角色即可调用相关功能。

7.3实现方式

7.4在Android中的应用

比如图片加载glide,我们加载图片只用免对Glide一个类就好了,glide把内部的网络请求,图片处理,缓存等小模块都封装在一起了。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值