文章目录

  • 1.AlertDialog、Notification源码使用了建造者模式完成参数的初始化
  • 2.安卓应用主题是抽象工厂模式的最好体现
  • 3.OKHttp内部采用责任链模式来完成每个interceptor拦截器的调用
  • 4.RxJava的观察者模式
  • 5.ListView/GridView的适配器模式
  • 6.Context外观模式

1.AlertDialog、Notification源码使用了建造者模式完成参数的初始化

优点:

  • 1.良好的封装性,隐藏内部实现细节
  • 2.建造者独立,容易拓展

缺点:
会产生多于的Builder对象和Director对象,消耗内存

2.安卓应用主题是抽象工厂模式的最好体现

安卓应用有两套主题:LightTheme亮色主题和DarkTheme暗色主题。主题之下有各种与之相关的UI元素。创建主题也要随之创建各种UI元素,这就是抽象工厂模式的最好体现。

优点:
分离接口和实现,面向接口编程。在具体实现中解耦,同时基于接口和实现的分离,使得产品类切换更加容易、灵活。

缺点:

  • 1.类文件爆炸性增加
  • 2.新的产品类不易扩展
3.OKHttp内部采用责任链模式来完成每个interceptor拦截器的调用

定义:使得多个对象都有机会处理请求,从而避免了请求的发送者和接受者之间的耦合关系。将这些对象连成一条链,并沿这条链传递该请求,直到有对象处理该请求为止。

优点:
将请求者和处理者关系解耦,使代码更加灵活

缺点:
在链中遍历寻找请求处理者中,如果处理者太多,会影响性能。

4.RxJava的观察者模式

定义:定义对象间一种一对多的依赖关系,使得每当一对象状态发生改变时们所有依赖它的对象会得到通知并自动更新.

应用:ListView的Adapter的notifyDataSetChanged方法,广播,事件总线机制.
观察者模式主要的作用是对象解耦,将观察者和被观察者分隔开,只依赖observer(观察员)和observable(可观察的)抽象.

优点:

  • 1.观察者和被观察者是抽象耦合,以应对业务变化
  • 2.增强系统的灵活性和可扩展性

缺点:
在Java中通知是顺序执行,如果观察者卡顿,会影响整体的执行效率.这种情况下,一般建议采用异步的方式.

5.ListView/GridView的适配器模式

使用场景:

  • 1.接口不兼容
  • 2.想建立一个可以重复使用的类
  • 3.需要统一的输出接口,而输入端类型不可知

优点:

  • 1.更好的复用性:复用现有的功能
  • 2.更好的扩展性:扩展现有的功能

缺点:
过多的使用适配器,会使系统凌乱不堪,不易于整体把握.如:明明调用的是A接口,内部适配的却是B接口的实现,如果系统出现太多这种情况,就会出现更多问题.

6.Context外观模式

使用场景:
为复杂子系统提供一个简单接口

优点:

  • 1.隐藏子系统实现细节,减少客户和子系统的耦合,能够拥抱变化;
  • 2.外观类对子系统接口封装,使子系统更加容易使用

缺点:

  • 1.外观类接口膨胀
  • 2.外观类没有遵循开闭原则,当业务出现变更时,可能需要修改外观类