设计模式-命令模式

导读:本篇文章讲解 设计模式-命令模式,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

简介

将“请求”封装成对象,以便使用不同的请求、队列或者日志来参数化其他对象。命令模式也支持可撤销的操作。(简化: 将请求封装成对象,将动作请求者和动作执行者解耦。)

实际应用场景

假设现在有电视、电脑、电灯等家电,现在需要你做个遥控器控制所有家电的开关,要求做到每个按钮对应的功能供用户个性化,对于新买入家电要有非常强的扩展性

UML

在这里插入图片描述
在这里插入图片描述

代码实现

/**
 * 命令执行器接口
 *
 * @author xiaoy
 * @since 2021-3-8 8:51
 */
public interface Command {

    void execute();
}

/**
 * @author xiaoy
 * @since 2021-3-8 8:52
 */
public class SqlCrud {

    public void query() {
        System.out.println("query...");
    }

    public void create() {
        System.out.println("create...");
    }

    public void delete() {
        System.out.println("delete...");
    }

    public void update() {
        System.out.println("update...");
    }
}
/**
 * @author xiaoy
 * @since 2021-3-8 8:55
 */
public class SqlCrudCreateCommand implements Command {

    private SqlCrud sqlCrud;

    public SqlCrudCreateCommand(SqlCrud sqlCrud) {
        this.sqlCrud = sqlCrud;
    }

    @Override
    public void execute() {
        sqlCrud.create();
    }
}
/**
 * @author xiaoy
 * @since 2021-3-8 8:55
 */
public class SqlCrudDeleteCommand implements Command {

    private SqlCrud sqlCrud;

    public SqlCrudDeleteCommand(SqlCrud sqlCrud) {
        this.sqlCrud = sqlCrud;
    }

    @Override
    public void execute() {
        sqlCrud.delete();
    }
}
/**
 * @author xiaoy
 * @since 2021-3-8 8:55
 */
public class SqlCrudQueryCommand implements Command {

    private SqlCrud sqlCrud;

    public SqlCrudQueryCommand(SqlCrud sqlCrud) {
        this.sqlCrud = sqlCrud;
    }

    @Override
    public void execute() {
        sqlCrud.query();
    }
}
/**
 * @author xiaoy
 * @since 2021-3-8 8:55
 */
public class SqlCrudUpdateCommand implements Command {

    private SqlCrud sqlCrud;

    public SqlCrudUpdateCommand(SqlCrud sqlCrud) {
        this.sqlCrud = sqlCrud;
    }

    @Override
    public void execute() {
        sqlCrud.update();
    }
}

测试

在这里插入图片描述

如果需要添加新的命令,只需要添加Command 的实现类,不用在去修改其它的实现类。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之家整理,本文链接:https://www.bmabk.com/index.php/post/15394.html

(0)
小半的头像小半

相关推荐

极客之家——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!