【设计模式】委派模式——登录案例

系列文章目录

【设计模式】策略模式——支付案例
【设计模式】模板模式——jdbc案例
【设计模式】适配器模式——登录案例


前言

       委派模式不属于23种设计模式,但是spring中出现了委派模式的影子,委派模式从字面上即可大概想到这个模式的含义,即想做有些事,但是我自己不想做,那么我委派给你做。老板让经理去做一个项目,经理肯定不会亲自去做,会合理的安排给自己的手下去完成这个项目。这时委派模式的含义就比较清楚了。


网上太多老板安排经理做事的例子,在此

一、登录案例

       适配器模式也是通过登录进行示例的。但是设计模式总是多个结合使用的,单单使用适配器模式会显得有一点点的瑕疵。比如,如果每种方式登录成功之后要设置登录的日志信息,并且每种登录方式的token生成策略如果不一样的话,单个的适配器模式是无法使得代码更加美观。
        引入委派模式,可以认为是当前对象知道要做某些事,但是却不会具体的实现,好比经理知道每天的任务,但是具体实现的时候要交给自己的小弟去做。

代码如下(抽象类):

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、视图解析器等等。达到了委派的效果。
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

叁滴水

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值