前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >给自己写的一篇命令行模式文章

给自己写的一篇命令行模式文章

作者头像
码农王同学
发布2020-03-25 10:37:46
3270
发布2020-03-25 10:37:46
举报
文章被收录于专栏:后端Coder

记得之前写过一篇设计模式的文章分享,想要了解的可以看下这篇文章Java之Builder模式的设计实现

分享这篇java命令行模式也要追溯到很久之前了,自己想要了解这个设计模式但是一直没有去写,现在看这个设计很简单了,命令行模式就形同领导交代事情,下属接收,然后去执行,leader->employee。是不是很好理解了?

为啥分享文章的原因就在于这个原因了,有的人可以用一句话点醒困惑你心中的疑惑,有的人教科书般给你说这说那,一头雾水,丝毫不知道在说什么,希望每一篇文章可以帮助到需要的人。

没有华丽的文采,还是采用易于理解的风格去写自己喜欢的内容好了,先看下示例程序。

代码语言:javascript
复制
package com.wpw.sprintbootcommand;

public interface Command {
    /**
     * 命令执行器
     */
    void exec();
}

首先我们先定义一个命令执行器,即是一个接口,然后定义一个具体的实现类实现这个命令执行器。

代码语言:javascript
复制
package com.wpw.sprintbootcommand;

/**
 * @author pc
 */
public class Commander implements Command {
    private Receiver receiver;

    Commander(Receiver receiver) {
        this.receiver = receiver;
    }

    @Override
    public void exec() {
        receiver.receive();
    }
}

为了便于解耦的实现,首先在命令执行器里面将接收器进行注入到Commander。

代码语言:javascript
复制
package com.wpw.sprintbootcommand;

import lombok.extern.slf4j.Slf4j;

/**
 * @author pc
 */
@Slf4j
class Receiver {
    /**
     * 接收器
     */
    void   receive() {
        System.out.println("receive invoker command to invoke");
        log.debug("reporter projress");
        System.out.println("目前进度已完成");
    }
}

为了最简单的说明,仅仅输出了一句"receive leader command to invoke ";其实receiver接收命令行之后要继续接下来的一系列动作了。

代码语言:javascript
复制
package com.wpw.sprintbootcommand;

class Leader {
    private Command command;

    Leader(Command command) {
        this.command = command;
    }

    void assign() {
        command.exec();
    }
}

真正安排活的人出来了,即Leader,这个也就是你的领导了,它只分配任务交给下面的人,也就是assign task 。到这里整个命令行就写完了。

下面的示例程序,运行正确,分享这篇文章也就结束了。

代码语言:javascript
复制
package com.wpw.sprintbootcommand;

/**
 * @author pc
 */
public class Test {
    public static void main(String[] args) {
        Leader leader = new Leader(new Commander(new Receiver()));
        leader.assign();
    }
}

看下控制台console输出的日志信息,表示我们的流程也就是结束了。

代码语言:javascript
复制
receive invoker command to invoke
DEBUG com.wpw.sprintbootcommand.Receiver - reporter projress
目前进度已完成

Process finished with exit code 0
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-01-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 码农王同学 微信公众号,前往查看

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

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

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