OkHttp设计模式剖析(六)外观模式

上一篇 OkHttp设计模式剖析(五)观察者模式

下一篇 OkHttp设计模式剖析(七)迭代器模式

OKHTTP:

由大名鼎鼎的Square公司开发的网络通信库。

设计模式:

软件开发中问题的解决套路。

外观模式简介

定义:要求一个子系统的外部与其内部的通信必须通过一个统一的对象进行。

外观模式(门面模式,Facade Pattern)提供了一个高层次的接口,屏蔽了系统与子系统的复杂性,使得用户更容易使用。外观模式就是我们平时封装API的手段,基本上所有的第三方库都用了外观模式,比如OkHttpClient.class就是OkHttp库的门面,EventBus.class的就是EventBus库的门面,GSON.class的就是GSON库的门面。

OkHttpClient中的外观模式

OkHttpClient的外观模式就很明显了,实例化一个HTTP客户端client是,可以配置拦截器,调度器等等。使用者不需要抠里面的实现细节,配合构造者模式build出所需要的OkHttpClient即可,下面的源码是OkHttpClient官方注释给的例子:

// 实例化一个默认的HTTP客户端
OkHttpClient client = new OkHttpClient();
// 使用自定义设置创建HTTP客户端实例
OkHttpClient client = new OkHttpClient.Builder()
                                .addInterceptor(new HttpLoggingInterceptor())  //增加拦截器
                                .cache(new Cache(cacheDir, cacheSize))  //设置用于读取和写入缓存响应的响应缓存。
                                .build();
//  实例化一个500毫秒则超时的HTTP客户端实例                         
OkHttpClient eagerClient = client.newBuilder()
                                .readTimeout(500, TimeUnit.MILLISECONDS)
                                .build();   

基于外观模式构建的其他代码

1、Android的Context类
2、EventBus的EventBus类
3、GSON的GSON类

银行VIP客户直接找客户经理

普通用户去银行办理业务一般流程入下:取号,填表,排队,柜台处理业务等。但是如果你是银行VIP金卡用户,在该行存款上百万的那种,进银行客户经理就给你请到办公室,帮你把茶泡好,然后你让吩咐他干啥他就干啥。这时候这个客户经理就是银行的外观(门面),你不用管他如何处理。

public class WithdrawMoney {
    @Override
    public String toString() { // 取款类
        return "取款";
    }   
}
public class LoanMoney { // 贷款类 
    @Override
    public String toString() {
        return "贷款";
    }
}
public class Fund { // 基金类
    @Override
    public String toString() {
        return "购买基金";
    }
}
public class CustomerManager{ // 客户经理类
    private WithdrawMoney w = new WithdrawMoney();
    private LoanMoney l = new LoanMoney();
    private Fund f = new Fund();
    
    WithdrawMoney getWithdrawMoney(){
        return w;
    }
    
    LoanMoney getLoanMoney(){
        return l;
    }
    
    Fund getFund(){
        return f;
    }
}

普通用户去银行取款,购买基金,得一个一个new这些对象。

public class Main {
    //普通客户去银行取款,买基金
    public static void main(String[] args){
        WithdrawMoney w = new WithdrawMoney(); 
        System.out.println(w);//取款
        Fund f = new Fund(); 
        System.out.println(f);//购买基金
    }
    
}

VIP用户去银行,直接找客户经理即可。

public class Main {
    //VIP客户去银行
    public static void main(String[] args){
        CustomerManager cm = new CustomerManager();
        System.out.println(cm.getWithdrawMoney());
        System.out.println(cm.getFund());       
    }
    
}

尤其在业务极其复杂时,比如又买股票,又卖基金,又投资黄金,又做理财,还得交一下今年的车险的时候,客户经理就及其重要了。
所以,外观设计模式的核心就是:统一入口。

参考文献

1、设计模式|菜鸟教程:https://www.runoob.com/design-pattern/design-pattern-tutorial.html
2、《Android源码设计模式解析与实战》何红辉,关爱民著
3、隔壁老李头:https://www.jianshu.com/p/82f74db14a18

上一篇 OkHttp设计模式剖析(五)观察者模式

下一篇 OkHttp设计模式剖析(七)迭代器模式

All is well.

你可能感兴趣的:(OkHttp设计模式剖析(六)外观模式)