一個登陸案例,學會委派設計模式!

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

前言

委派模式不屬於23種設計模式,可是spring中出現了委派模式的影子,委派模式從字面上便可大概想到這個模式的含義,即想作有些事,可是我本身不想作,那麼我委派給你作。java

老闆讓經理去作一個項目,經理確定不會親自去作,會合理的安排給本身的手下去完成這個項目。這時委派模式的含義就比較清楚了。面試

網上太多老闆安排經理作事的例子,在此!spring

1、登陸案例

適配器模式也是經過登陸進行示例的。可是設計模式老是多個結合使用的,單單使用適配器模式會顯得有一點點的瑕疵。設計模式

好比,若是每種方式登陸成功以後要設置登陸的日誌信息,而且每種登陸方式的token生成策略若是不同的話,單個的適配器模式是沒法使得代碼更加美觀。intellij-idea

引入委派模式,能夠認爲是當前對象知道要作某些事,可是卻不會具體的實現,比如經理知道天天的任務,可是具體實現的時候要交給本身的小弟去作。app

代碼以下(抽象類):ide

public abstract class AbstractLoginService  {

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

建立抽象類,建立抽象方法sendLoggetToken,子類繼承抽象類,實現抽象方法。工具

代碼以下(短信登陸示例):學習

public class SmsLoginService extends AbstractLoginService {
    //手機號
    //驗證碼
    @Override
    public void login(UserInfo user){
        System.out.println("短信登陸");
        //驗證驗證碼是否正確
        this.checkCode(user.getMobile(),user.getCode());
        UserInfo userInfo = null;//this.userMapper.getUserInfo(user.getMobile());
        super.login(userInfo);
    }
    @Override
    public void sendLog() {
        System.out.println("這裏設置短信登陸日誌信息");
    }
    @Override
    public void getToken() {
        System.out.println("獲取短信登陸token");
    }
    private void checkCode(String mobile, String code) {
        System.out.println("驗證驗證碼");
    }
}

子類實現抽象方法後,能夠實現不一樣的登陸方式的發送登陸日誌和獲取token的實現各不相同。

總結

委派模式即一件事情(或一個請求)對象自己不知道怎樣處理,對象把請求交給其它對象來作。

在spring源碼中能夠看到更多委派模式的代碼示例,

例如:

  1. AbstractApplicationContext類中obtainFreshBeanFactory方法中的refreshBeanFactory方法,和我這個例子相似,主類不關注或者說不知道如何實現refreshBeanFactory方法,交給子類實現,達到了委派的效果。
  2. DispatcherServlet這個springMVC的前端控制器或者說這就是一個轉發器。全部的信息都會通過這個類,可是這個類缺只是轉發,具體實現委派給了HandlerMapping、視圖解析器等等。達到了委派的效果。

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

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

近期熱文推薦:

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

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

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

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

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

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

相關文章
相關標籤/搜索