一個(gè)登錄案例,學(xué)會(huì)委派設(shè)計(jì)模式!
點(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ú)法使得代碼更加美觀。
代碼如下(抽象類):
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)建抽象方法sendLog和getToken,子類繼承抽象類,實(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源碼中可以看到更多委派模式的代碼示例,
例如:
AbstractApplicationContext類中obtainFreshBeanFactory方法中的refreshBeanFactory方法,和我這個(gè)例子類似,主類不關(guān)注或者說(shuō)不知道如何實(shí)現(xiàn)refreshBeanFactory方法,交給子類實(shí)現(xiàn),達(dá)到了委派的效果。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>


