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.使用场景:
1.接口不兼容
2.想建立一个可以重复使用的类
3.需要统一的输出接口,而输入端类型不可知。
优点:
1.更好的复用性:复用现有的功能;
2.更好的扩展性:扩展现有的功能。
缺点:
过多的使用适配器,会使系统凌乱不堪,不易于整体把握。如:明明调用的是A接口,内部适配的却是B接口的实现,如果系统出现太多这种情况,无异于一场灾难。
6.Context外观模式:
使用场景:
为复杂子系统提供一个简单接口。
优点:
1.隐藏子系统实现细节,减少客户和子系统的耦合,能够拥抱变化;
2.外观类对子系统接口封装,使子系统更加容易使用。
缺点:
1.外观类接口膨胀;
2.外观类没有遵循开闭原则,当业务出现变更时,可能需要修改外观类。
参考文章:https://juejin.im/post/5e5c5c52f265da575f4e7558#heading-23