一、Retrofit中的设计模式
二、OKHTTP中的设计模式
1、责任链模式interceptor拦截器:最主要的是5个拦截器
2、建造者:okhttp的client创建用了
3、观察者:返回结果抽离应该算是
4、工厂模式:Call 的创建用了工厂,CacheStrategy.Factory
,这是一个简单工厂模式,主要也是用于生成一个CacheStrategy
对象。
5、门面模式:这个模式可能太常见了,确实式一个很容易让人忽略的地方,因为几乎所有框架或者开源库基本上都或多或少的使用到了门面模式。
门面模式的定义:提供一个统一的接口去访问多个子系统的多个不同的接口,它为子系统中的一组接口提供一个统一的高层接口。也称外观模式。
简单说就是提供一个类提供一些接口供客户端使用,隐藏内部调用的复杂性。OkHttp中提供了一个类OkHttpClient来供用户使用,其内部关联了大量的对象,以及处理细节,但是用户只需要根据OkHttpClient提供的接口使用即可。从这方面看确实大部分的开源框架都在使用门面模式。
三、RxJava中的设计模式
Rxjava中的设计模式 - 简书
1、观察者模式:Observable 就是一个被观察者,而 Observer 为观察者,当 Observer 订阅 Observable 时,Observer 就可以收到 Observable 的事件通知。
2、装饰者模式:在不改变原类文件(Observer)以及不使用继承的情况下,动态地将责任附加到对象上(mapper.apply(t)),从而实现动态拓展一个对象的功能。它是通过创建一个包装对象(MapObserver),也就是装饰来包裹真实的对象(Observer)
四、列举一些Android源码中设计模式
Builder模式:比如AlertDialog.Builder;
适配器模式:比如GridView、ListView与Adapter;
观察者模式:比如ContentObserver;Android LiveData就是通过观察者模式提供的
抽象工厂模式:比如BaseActivity;
单例模式:ActivityManagerSingleton
模版方法:Android中view的绘制流程就使用了设计模式。在父类中定义好具体要执行的类的方法。然后子类根据具体的需要去选择具体的实现
装饰者模式:context类图如下:
Context(抽象构件):它是具体构件和抽象装饰类的共同父类,声明了在具体构件中实现的业务方法,它的引入可以使客户端以一致的方式处理未被装饰的对象以及装饰之后的对象,实现客户端的透明操作。
ContextImpl(具体构件):它是抽象构件类的子类,用于定义具体的构件对象,实现了在抽象构件中声明的方法,装饰器可以给它增加额外的职责(方法)。
ContextWrapper(抽象装饰类):它也是抽象构件类的子类,抽象装饰类不一定是抽象方法。用于给具体构件增加职责,但是具体职责在其子类中实现。它维护一个指向抽象构件对象的引用,通过该引用可以调用装饰之前构件对象的方法,并通过其子类扩展该方法,以达到装饰的目的。
Service,Application(具体装饰类):它是抽象装饰类的子类,负责向构件添加新的职责。每一个具体装饰类都定义了一些新的行为,它可以调用在抽象装饰类中定义的方法,并可以增加新的方法用以扩充对象的行为。
在startActivity时候,会调用系统的handleLaunchActivity方法,接着调用performLaunchActivity方法。其中会创建一个ContextImpl. 然后activity.attach(ContextImpl)将ContextImpl赋予ContextWrapper的mBase。ContextWrapper中的所有行为全都通过mBase去实现。同时ContextWrapper通过具体的子类扩展方法不同的行为,实现对context的装饰和功能扩展。