能否从安卓中举几个列子,分别用到了那些设计模式?

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

 

 

你可能感兴趣的:(能否从安卓中举几个列子,分别用到了那些设计模式?)