<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          一個(gè)登錄案例,學(xué)會(huì)適配器設(shè)計(jì)模式!

          共 3373字,需瀏覽 7分鐘

           ·

          2021-03-14 14:41

          點(diǎn)擊關(guān)注公眾號(hào),Java干貨及時(shí)送達(dá)

          作者:叁滴水
          博客:https://blog.csdn.net/qq_30285985/

          前言

          有的手機(jī)沒有耳機(jī)插口,如果想使用圓形插口的耳機(jī),就需要通過一個(gè)轉(zhuǎn)接頭進(jìn)行適配。適配器模式就是這樣的一個(gè)作用,作為兩個(gè)不兼容的接口之間的橋梁。

          映射到代碼中,可以想到登錄,現(xiàn)在的登錄方式有很多種,賬號(hào)密碼登錄,短信登錄,還有很多第三方登錄(qq登錄,微信登錄)等等。每一種登錄接收的參數(shù)都不一樣(插口不一樣)。

          一、代碼示例

          1.賬號(hào)密碼登錄

          假如項(xiàng)目剛剛開發(fā),只有一個(gè)賬號(hào)密碼登錄

          代碼如下(示例):傳入賬號(hào)密碼,判斷是否正確,之后設(shè)置各種日志信息,設(shè)置session等等。

          public class LoginService {

              // 賬號(hào)密碼登錄
              public void login(UserInfo user){
                  System.out.println("賬號(hào)密碼登錄");
                  UserInfo userInfo = userMapper.getUserInfo(user.getUserName(),user.getPassword());
                  // 設(shè)置登錄日志
                  // 設(shè)置session
                  // 等等各種操作此處省略
              }
          }

          2.短信登錄

          假如有一天,產(chǎn)品大大要加入短信登錄,短信登錄只有手機(jī)號(hào)和驗(yàn)證碼。

          代碼如下(示例):創(chuàng)建SmsLoginService

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

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

          短信登錄service繼承LoginService,重寫login方法,然后轉(zhuǎn)換成賬號(hào)密碼登錄需要的參數(shù)信息進(jìn)行登錄。另外,關(guān)注公眾號(hào)Java技術(shù)棧,在后臺(tái)回復(fù):設(shè)計(jì)模式,可以獲取我整理的 Java 設(shè)計(jì)模式系列教程,不斷更新中。

          3.微信登錄

          代碼如下(賬號(hào)密碼登錄):

          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方法轉(zhuǎn)換成賬號(hào)密碼登錄需要的參數(shù),來進(jìn)行適配。

          public class UserInfo {
              private Long id;
              private String userName;
              private String password;
              private String mobile;
              private String openId;// 線上可能一個(gè)人多個(gè)openId
              private String code;
          }

          這種寫法,確實(shí)簡(jiǎn)化了部分代碼,但是總感覺有一點(diǎn)點(diǎn)的牽強(qiáng),因?yàn)閷?shí)際情況中,經(jīng)常會(huì)多個(gè)設(shè)計(jì)模式一起使用。

          比如登錄的時(shí)候可以分為 驗(yàn)證用戶信息,生成用戶憑證,記錄日志,3個(gè)步驟。這個(gè)時(shí)候就可以引入模板模式來固定流程的執(zhí)行順序。

          或者說在進(jìn)行選擇某一種登錄的時(shí)候,會(huì)不會(huì)出現(xiàn)多個(gè)if/else的判斷呢?那么可不可以引入策略模式呢?

          設(shè)計(jì)模式是根據(jù)場(chǎng)景來靈活的運(yùn)用,杜絕為了使用設(shè)計(jì)模式而是用設(shè)計(jì)模式。要學(xué)會(huì)后發(fā)制人,化有行為無形,無論怎么寫,代碼最終講究的是優(yōu)雅、靈活。

          另外,想學(xué)習(xí)更多的策略模式,可以關(guān)注公眾號(hào)Java技術(shù)棧,在后臺(tái)回復(fù):設(shè)計(jì)模式,可以獲取我整理的設(shè)計(jì)模式教程,都是實(shí)戰(zhàn)干貨。

          本文來自作者「叁滴水」投稿,謝謝分享,也歡迎愛好技術(shù)分享的各位技術(shù)朋友向「Java技術(shù)棧」投稿,讓更多人看到,投稿方式:關(guān)注公眾號(hào)「Java技術(shù)棧」在后臺(tái)回復(fù):投稿。






          關(guān)注Java技術(shù)棧看更多干貨



          獲取 Spring Boot 實(shí)戰(zhàn)筆記!
          瀏覽 52
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  99在线观看 | 黄色一及片自拍 | 欧美黄色激情视频 | 天天看A| 一级免费看精品 |