<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ì)模式!

          共 3307字,需瀏覽 7分鐘

           ·

          2021-03-18 09:58

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

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

          前言

          委派模式不屬于23種設(shè)計(jì)模式,但是spring中出現(xiàn)了委派模式的影子,委派模式從字面上即可大概想到這個(gè)模式的含義,即想做有些事,但是我自己不想做,那么我委派給你做。

          老板讓經(jīng)理去做一個(gè)項(xiàng)目,經(jīng)理肯定不會(huì)親自去做,會(huì)合理的安排給自己的手下去完成這個(gè)項(xiàng)目。這時(shí)委派模式的含義就比較清楚了。

          網(wǎng)上太多老板安排經(jīng)理做事的例子,在此!

          一、登錄案例

          適配器模式也是通過(guò)登錄進(jìn)行示例的。但是設(shè)計(jì)模式總是多個(gè)結(jié)合使用的,單單使用適配器模式會(huì)顯得有一點(diǎn)點(diǎn)的瑕疵。

          比如,如果每種方式登錄成功之后要設(shè)置登錄的日志信息,并且每種登錄方式的token生成策略如果不一樣的話,單個(gè)的適配器模式是無(wú)法使得代碼更加美觀。

          引入委派模式,可以認(rèn)為是當(dāng)前對(duì)象知道要做某些事,但是卻不會(huì)具體的實(shí)現(xiàn),好比經(jīng)理知道每天的任務(wù),但是具體實(shí)現(xiàn)的時(shí)候要交給自己的小弟去做。

          代碼如下(抽象類):

          public abstract class AbstractLoginService  {

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

          創(chuàng)建抽象類,創(chuàng)建抽象方法sendLoggetToken,子類繼承抽象類,實(shí)現(xiàn)抽象方法。最新 Java 核心技術(shù)教程,推薦大家閱讀。

          代碼如下(短信登錄示例):

          public class SmsLoginService extends AbstractLoginService {
              //手機(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 = null;//this.userMapper.getUserInfo(user.getMobile());
                  super.login(userInfo);
              }
              @Override
              public void sendLog() {
                  System.out.println("這里設(shè)置短信登錄日志信息");
              }
              @Override
              public void getToken() {
                  System.out.println("獲取短信登錄token");
              }
              private void checkCode(String mobile, String code) {
                  System.out.println("驗(yàn)證驗(yàn)證碼");
              }
          }

          子類實(shí)現(xiàn)抽象方法后,可以實(shí)現(xiàn)不同的登錄方式的發(fā)送登錄日志和獲取token的實(shí)現(xiàn)各不相同。

          總結(jié)

          委派模式即一件事情(或一個(gè)請(qǐng)求)對(duì)象本身不知道怎樣處理,對(duì)象把請(qǐng)求交給其它對(duì)象來(lái)做。

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

          例如:

          1. AbstractApplicationContext類中obtainFreshBeanFactory方法中的refreshBeanFactory方法,和我這個(gè)例子類似,主類不關(guān)注或者說(shuō)不知道如何實(shí)現(xiàn)refreshBeanFactory方法,交給子類實(shí)現(xiàn),達(dá)到了委派的效果。
          2. DispatcherServlet這個(gè)springMVC的前端控制器或者說(shuō)這就是一個(gè)轉(zhuǎn)發(fā)器。所有的信息都會(huì)經(jīng)過(guò)這個(gè)類,但是這個(gè)類缺只是轉(zhuǎn)發(fā),具體實(shí)現(xiàn)委派給了HandlerMapping、視圖解析器等等。達(dá)到了委派的效果。

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

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






          關(guān)注Java技術(shù)??锤喔韶?/strong>



          獲取 Spring Boot 實(shí)戰(zhàn)筆記!
          瀏覽 29
          點(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>
                  日屄视频在线观看 | 国产精品久久久久久久鸭 | 精品国精品自拍自在线 | 父女乱情沈娜娜 | 大香蕉69 |