前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【设计模式-命令模式】

【设计模式-命令模式】

作者头像
Liusy
发布2020-09-01 16:26:59
3700
发布2020-09-01 16:26:59
举报
文章被收录于专栏:Liusy01Liusy01

【导读】这是一个抽象与具体的关系,比如军队中上级命令下级去模拟训练或处理突发情况,这些都属于命令,只是命令的具体内容不同。

一、定义

将一个请求封装为一个对象,使发出请求的责任和执行请求的责任分割开。这样两者之间通过命令对象进行沟通,这样方便将命令对象进行储存、传递、调用、增加与管理。

二、实例

比如日常打杂中,组长需要让打杂人员(例如我)去启动或关闭某个服务器,这就是一组命令,组长与打杂人员之间的介质是命令这个对象。

服务器对象:

代码语言:javascript
复制
public class Server {
    private String name;
    public Server(String name) {
        this.name = name;
    }
}

抽象命令对象:

代码语言:javascript
复制
public interface Command {
    void execute();
}

关闭服务器命令对象:

代码语言:javascript
复制
public class CloseServerCommand implements Command {
    private Server server;
    public CloseServerCommand(Server server) {
        this.server = server;
    }
    @Override
    public void execute() {
        System.out.println("关闭"+server.getName()+"服务器");
    }
}

启动服务器命令对象:

代码语言:javascript
复制
public class OpenServerCommand implements Command {

    private Server server;

    public OpenServerCommand(Server server) {
        this.server = server;
    }

    @Override
    public void execute() {
        System.out.println("打开"+server.getName()+"服务器");
    }
}

具体打杂人员对象:

代码语言:javascript
复制
public class Worker {
    1、包含一组命令
    private List<Command> commandList = new ArrayList<Command>();

    public void addCommand(Command command) {
        commandList.add(command);
    }
    2、依次执行命令
    public void executeCommand() {
        for (Command command : commandList) {
            command.execute();
        }
    }

}

测试代码:

代码语言:javascript
复制
Worker worker = new Worker();
worker.addCommand(new OpenServerCommand(new Server("1.1.1.1")));
worker.addCommand(new CloseServerCommand(new Server("2.2.2.2")));
worker.executeCommand();

运行结果:

类图:

三、源码实例

(1)Thread里面的Runnable对象就是一个抽象的命令,都是需要重写其run方法。

(2)日常编码规范中方法参数设置一般都是传接口

最后说一句:设计模式基本是面向对象的多态、封装、继承的表现。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-03-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Liusy01 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档