设计模式——命令模式

设计模式——命令模式

从前有个佣人,天天做家务,有一天她累了。坐在地上,她想:我每天都拿着扫帚扫地,拿着抹布擦桌子,干一百件活要用一百种方式。如果能有一个万能的盒子,盒子里面可能有扫帚,可能有抹布,每当干家务时我只需要把盒子打开就能完成相应的活了。

1.情急举例

今天要做的是一个万能处理机,不管什么样的请求,什么样的工作,万能处理机都能完成。

让我们来构思一下做法。很简单啊,只需要一个处理机类就行了,然后里边有各式各样的方法,想实现哪个功能就调用哪个方法。

等等,工作是做不完的,如果有新的工作怎么办?给万能处理机增加一个新的方法吗?如果我有100亿个功能呢?

让我们用命令模式重构万能处理机。

2.使用命令模式

万能处理机每做一件工作,就相当于是执行了一条命令。现在我们输入的每一条命令都是不同格式的,万能处理机每次都要用独一无二的方法处理命令,命令执行人紧紧的耦合在了一起。

使用命令模式,把命令和执行人分离开来。

首先,我们要让所有的命令有统一的格式,这样万能处理机就不用去识别命令的格式了,它只需要用统一的操作方法去执行命令即可。

//统一的命令格式
public interface Command {
    
    //每个具体的命令都要实现该方法
    public void execute();
}

我们通过Command接口规范所有的命令格式。

现在万能处理机不会再对不同格式的命令有不同的动作了,它只接受实现Command接口的类,只操作接口。

public class Processor {

    //通过多态操纵对象
    public void doCommand(Command command) {
        command.execute();
    }
}

现在我们实现具体的命令吧。

//输入操作
public class InputCommand implements Command {
    @Override
    public void execute() {
        System.out.println("输入操作处理完毕");
    }
}
//打印操作
public class PrintCommand implements Command {

    @Override
    public void execute() {
        System.out.println("打印操作处理完毕");
    }
}

每个具体的命令都实现了Command接口,这样他们就相当于是拥有了统一的格式,处理机在处理这些请求时就不用一一分析了,只需操纵Command接口方法即可。

测试。

public class MainTest {
    public static void main(String[] args) {
        //定义一个命令集合
        ArrayList<Command> list = new ArrayList<>(5);
        //加入命令
        list.add(new InputCommand());
        list.add(new InputCommand());
        list.add(new PrintCommand());
        list.add(new InputCommand());
        list.add(new PrintCommand());

        //创建一个万能处理器
        Processor p1 = new Processor();
        for (int i = 0; i < list.size(); i++) {
            //循环执行命令集
            p1.doCommand(list.get((i)));
        }

    }
}

万能处理器成功的执行了任务。以后新任务出现了,就让他实现Command接口,规范命令的格式,这样就可以放到万能处理器中实现了。

3.命令模式小结

命令模式把请求进行封装,统一他们的“格式”。让我们可以通过参数化类型或者同一方法一视同仁的使用它。

在实际开发中,如果遇到了太多太多的特殊情况,需要我们一一给这些特殊情况编码时,就考虑一下使用命令模式。通过一个接口让这些特殊情况有一个共同的特征,以便我们能够一视同仁的使用它们。

本项目是一个基于SSM(Spring+SpringMVC+MyBatis)后端框架与Vue.js前端框架开发的疫情居家办公系统。该系统旨在为居家办公的员工提供一个高效、便捷的工作环境,同时帮助企业更好地管理远程工作流程。项目包含了完整的数据库设计、前后端代码实现以及详细的文档说明,非常适合计算机相关专业的毕设学生和需要进行项目实战练习的Java学习者。 系统的核心功能包括用户管理、任务分配、进度跟踪、文件共享和在线沟通等。用户管理模块允许管理员创建和管理用户账户,分配不同的权限。任务分配模块使项目经理能够轻松地分配任务给团队成员,并设置截止日期。进度跟踪模块允许员工实时更新他们的工作状态,确保项目按计划进行。文件共享模块提供了一个安全的平台,让团队成员可以共享和协作处理文档。在线沟通模块则支持即时消息和视频会议,以增强团队之间的沟通效率。 技术栈方面,后端采用了Spring框架来管理业务逻辑,SpringMVC用于构建Web应用程序,MyBatis作为ORM框架简化数据库操作。前端则使用Vue.js来实现动态用户界面,搭配Vue Router进行页面导航,以及Vuex进行状态管理。数据库选用MySQL,确保数据的安全性和可靠性。 该项目不仅提供了一个完整的技术实现示例,还为开发者留下了扩展和改进的空间,可以根据实际需求添加新功能或优化现有功能。
本项目是一个基于SSM(Spring+SpringMVC+MyBatis)后端框架与Vue.js前端框架开发的网上球鞋竞拍系统。该项目旨在为球鞋爱好者提供一个便捷、高效的在线竞拍平台,用户可以在此平台上浏览、搜索、竞拍心仪的球鞋,并参与到各种有趣的竞拍活动中。 系统的主要功能包括用户注册登录、球鞋信息展示、竞拍活动创建与管理、实时竞拍以及交易安全保障等。用户可以通过注册账号后,浏览平台上发布的各类球鞋信息,包括品牌、型号、颜色、尺码以及当前竞拍状态等。系统支持用户创建和管理自己的竞拍活动,设定竞拍规则和时间,同时提供实时竞拍功能,确保公平、透明的交易过程。 在技术实现上,后端采用SSM框架进行开发,Spring负责业务逻辑层,SpringMVC处理Web请求,MyBatis进行数据库操作,保证了系统的稳定性和扩展性。前端则使用Vue.js框架,结合Axios进行数据请求,实现了前后端分离,提高了开发效率和用户体验。 数据库设计方面,系统采用了MySQL数据库,存储用户信息、球鞋信息、竞拍活动等数据,确保数据的安全性和完整性。此外,项目还包含了详细的文档资料,包括需求分析、系统设计、数据库设计以及测试报告等,为项目的实施和维护提供了有力的支持。 该项目不仅适合作为计算机相关专业学生的毕业设计题目,也适合Java学习者进行实战练习,通过在此基础上进行功能扩展和改进,可以进一步提升编程技能和项目管理能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值