一个登录案例,学会委派设计模式!

简介: 委派模式不属于23种设计模式,但是spring中出现了委派模式的影子,委派模式从字面上即可大概想到这个模式的含义,即想做有些事,但是我自己不想做,那么我委派给你做。

前言

委派模式不属于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源码中可以看到更多委派模式的代码示例,


例如:


AbstractApplicationContext类中obtainFreshBeanFactory方法中的refreshBeanFactory方法,和我这个例子类似,主类不关注或者说不知道如何实现refreshBeanFactory方法,交给子类实现,达到了委派的效果。

DispatcherServlet这个springMVC的前端控制器或者说这就是一个转发器。所有的信息都会经过这个类,但是这个类缺只是转发,具体实现委派给了HandlerMapping、视图解析器等等。达到了委派的效果。

另外,想学习更多的策略模式,可以关注公众号Java技术栈,在后台回复:设计模式,可以获取我整理的设计模式教程,都是实战干货。


相关实践学习
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
相关文章
|
10月前
|
设计模式 存储 缓存
「全网最细 + 实战源码案例」设计模式——享元模式
享元模式(Flyweight Pattern)是一种结构型设计模式,旨在减少大量相似对象的内存消耗。通过分离对象的内部状态(可共享、不变)和外部状态(依赖环境、变化),它有效减少了内存使用。适用于存在大量相似对象且需节省内存的场景。模式优点包括节省内存和提高性能,但会增加系统复杂性。实现时需将对象成员变量拆分为内在和外在状态,并通过工厂类管理享元对象。
387 92
|
10月前
|
设计模式 存储 算法
「全网最细 + 实战源码案例」设计模式——命令模式
命令模式(Command Pattern)是一种行为型设计模式,将请求封装成独立对象,从而解耦请求方与接收方。其核心结构包括:Command(命令接口)、ConcreteCommand(具体命令)、Receiver(接收者)和Invoker(调用者)。通过这种方式,命令的执行、撤销、排队等操作更易扩展和灵活。 适用场景: 1. 参数化对象以操作。 2. 操作放入队列或远程执行。 3. 实现回滚功能。 4. 解耦调用者与接收者。 优点: - 遵循单一职责和开闭原则。 - 支持命令组合和延迟执行。 - 可实现撤销、恢复功能。 缺点: - 增加复杂性和类数量。
349 14
「全网最细 + 实战源码案例」设计模式——命令模式
|
10月前
|
设计模式 存储 Java
「全网最细 + 实战源码案例」设计模式——责任链模式
责任链模式(Chain of Responsibility Pattern)是一种行为型设计模式,允许将请求沿着处理者链进行发送。每个处理者可以处理请求或将其传递给下一个处理者,从而实现解耦和灵活性。其结构包括抽象处理者(Handler)、具体处理者(ConcreteHandler)和客户端(Client)。适用于不同方式处理不同种类请求、按顺序执行多个处理者、以及运行时改变处理者及其顺序的场景。典型应用包括日志处理、Java Web过滤器、权限认证等。
236 13
「全网最细 + 实战源码案例」设计模式——责任链模式
|
10月前
|
设计模式 算法 开发者
「全网最细 + 实战源码案例」设计模式——策略模式
策略模式(Strategy Pattern)是一种行为型设计模式,用于定义一系列可替换的算法或行为,并将它们封装成独立的类。通过上下文持有策略对象,在运行时动态切换算法,提高代码的可维护性和扩展性。适用于需要动态切换算法、避免条件语句、经常扩展算法或保持算法独立性的场景。优点包括符合开闭原则、运行时切换算法、解耦上下文与策略实现、减少条件判断;缺点是增加类数量和策略切换成本。示例中通过定义抽象策略接口和具体策略类,结合上下文类实现动态算法选择。
358 8
「全网最细 + 实战源码案例」设计模式——策略模式
|
10月前
|
设计模式 SQL 算法
「全网最细 + 实战源码案例」设计模式——模板方法模式
模板方法模式是一种行为型设计模式,定义了算法的骨架并在父类中实现不变部分,将可变部分延迟到子类实现。通过这种方式,它避免了代码重复,提高了复用性和扩展性。具体步骤由抽象类定义,子类实现特定逻辑。适用于框架设计、工作流和相似算法结构的场景。优点包括代码复用和符合开闭原则,缺点是可能违反里氏替换原则且灵活性较低。
265 7
「全网最细 + 实战源码案例」设计模式——模板方法模式
|
10月前
|
设计模式 存储 安全
「全网最细 + 实战源码案例」设计模式——组合模式
组合模式(Composite Pattern)是一种结构型设计模式,用于将对象组合成树形结构以表示“部分-整体”的层次结构。它允许客户端以一致的方式对待单个对象和对象集合,简化了复杂结构的处理。组合模式包含三个主要组件:抽象组件(Component)、叶子节点(Leaf)和组合节点(Composite)。通过这种模式,客户端可以统一处理简单元素和复杂元素,而无需关心其内部结构。适用于需要实现树状对象结构或希望以相同方式处理简单和复杂元素的场景。优点包括支持树形结构、透明性和遵循开闭原则;缺点是可能引入不必要的复杂性和过度抽象。
346 22
|
11月前
|
设计模式 前端开发 数据库
「全网最细 + 实战源码案例」设计模式——桥接模式
桥接模式(Bridge Pattern)是一种结构型设计模式,通过将抽象部分与实现部分分离,使它们可以独立变化,从而降低代码耦合度,避免类爆炸,提高可扩展性。其结构包括实现类接口、具体实现类、抽象类和精确抽象类。适用于多维度扩展类、隐藏实现细节、简化庞杂类以及运行时切换实现方法的场景。优点包括高扩展性、隐藏实现细节、遵循开闭原则和单一职责原则;缺点是可能增加代码复杂度。示例中展示了不同操作系统播放不同格式视频文件的实现。
282 19
|
7月前
|
设计模式 Java 数据库连接
【设计模式】【创建型模式】工厂方法模式(Factory Methods)
一、入门 什么是工厂方法模式? 工厂方法模式(Factory Method Pattern)是一种创建型设计模式,它定义了一个用于创建对象的接口,但由子类决定实例化哪个类。工厂方法模式使类的实例化延迟
231 16
|
7月前
|
设计模式 负载均衡 监控
并发设计模式实战系列(2):领导者/追随者模式
🌟 ​大家好,我是摘星!​ 🌟今天为大家带来的是并发设计模式实战系列,第二章领导者/追随者(Leader/Followers)模式,废话不多说直接开始~
234 0
|
7月前
|
设计模式 监控 Java
并发设计模式实战系列(1):半同步/半异步模式
🌟 ​大家好,我是摘星!​ 🌟今天为大家带来的是并发设计模式实战系列,第一章半同步/半异步(Half-Sync/Half-Async)模式,废话不多说直接开始~
219 0

热门文章

最新文章