一個登陸案例,學會適配器設計模式!

做者:叄滴水\
博客:https://blog.csdn.net/qq_3028...java

前言

有的手機沒有耳機插口,若是想使用圓形插口的耳機,就須要經過一個轉接頭進行適配。適配器模式就是這樣的一個做用,做爲兩個不兼容的接口之間的橋樑。面試

映射到代碼中,能夠想到登陸,如今的登陸方式有不少種,帳號密碼登陸,短信登陸,還有不少第三方登陸(qq登陸,微信登陸)等等。每一種登陸接收的參數都不同(插口不同)。spring

1、代碼示例

1.帳號密碼登陸

假如項目剛剛開發,只有一個帳號密碼登陸設計模式

代碼以下(示例):傳入帳號密碼,判斷是否正確,以後設置各類日誌信息,設置session等等。微信

public class LoginService {

    // 帳號密碼登陸
    public void login(UserInfo user){
        System.out.println("帳號密碼登陸");
        UserInfo userInfo = userMapper.getUserInfo(user.getUserName(),user.getPassword());
        // 設置登陸日誌
        // 設置session
        // 等等各類操做此處省略
    }
}

2.短信登陸

假若有一天,產品大大要加入短信登陸,短信登陸只有手機號和驗證碼。session

代碼以下(示例):建立SmsLoginServiceintellij-idea

public class SmsLoginService extends LoginService {
    //手機號
    //驗證碼
    @Override
    public void login(UserInfo user){
        System.out.println("短信登陸");
        //驗證驗證碼是否正確
        this.checkCode(user.getMobile(),user.getCode());

        UserInfo userInfo =  this.userMapper.getUserInfo(user.getMobile());
        super.login(userInfo);
    }
}

短信登陸service繼承LoginService,重寫login方法,而後轉換成帳號密碼登陸須要的參數信息進行登陸。app

3.微信登陸

代碼以下(帳號密碼登陸):ide

public class WechatLoginService extends LoginService {
    //微信登陸
    // user中只有openId
    @Override
    public void login(UserInfo user){
        System.out.println("微信登陸");
        //經過openId 獲取用戶信息
        UserInfo userInfo = userMapper.getUserInfo(user.getOpenId());
        super.login(userInfo);
    }
}

同理,微信登陸也能夠繼承LoginServie,重寫login方法轉換成帳號密碼登陸須要的參數,來進行適配。工具

public class UserInfo {
    private Long id;
    private String userName;
    private String password;
    private String mobile;
    private String openId;// 線上可能一我的多個openId
    private String code;
}

這種寫法,確實簡化了部分代碼,可是總感受有一點點的牽強,由於實際狀況中,常常會多個設計模式一塊兒使用。

好比登陸的時候能夠分爲 驗證用戶信息,生成用戶憑證,記錄日誌,3個步驟。這個時候就能夠引入模板模式來固定流程的執行順序。

或者說在進行選擇某一種登陸的時候,會不會出現多個if/else的判斷呢?那麼可不能夠引入策略模式呢?

設計模式是根據場景來靈活的運用,杜絕爲了使用設計模式而是用設計模式。要學會後發制人,化有行爲無形,不管怎麼寫,代碼最終講究的是優雅、靈活。

另外,想學習更多的策略模式,能夠關注公衆號Java技術棧,在後臺回覆:設計模式,能夠獲取我整理的設計模式教程,都是實戰乾貨。

本文來自做者「叄滴水」投稿,謝謝分享,也歡迎愛好技術分享的各位技術朋友向「Java技術棧」投稿,讓更多人看到,投稿方式:關注公衆號「Java技術棧」在後臺回覆:投稿。

近期熱文推薦:

1.600+ 道 Java面試題及答案整理(2021最新版)

2.終於靠開源項目弄到 IntelliJ IDEA 激活碼了,真香!

3.阿里 Mock 工具正式開源,幹掉市面上全部 Mock 工具!

4.Spring Cloud 2020.0.0 正式發佈,全新顛覆性版本!

5.《Java開發手冊(嵩山版)》最新發布,速速下載!

以爲不錯,別忘了隨手點贊+轉發哦!

相關文章
相關標籤/搜索