Java设计模式-命令模式(Command)

文章目录

  • 一、前言
  • 二、命令模式
    • 1.命令模式是什么?
    • 2.命令模式解决什么问题?
    • 3.命令模式怎么使用?
  • 三、命令模式示例代码
    • 1.定义命令抽象类
    • 2. 具体的命令类
    • 3.定义命令调用者
    • 4.测试
  • 四 总结

一、前言

命令模式应用的场景比较广泛,智能家居控制,操作比较复杂的命令,新建一个菜单,系统点击按钮都是发出命令,系统接收命令会执行命令进行反馈,点击查询,后台接收请求返回请求数据等等。

二、命令模式

1.命令模式是什么?

将一个请求封装成一个对象,从而使您可以用不同的请求对客户进行参数化。

2.命令模式解决什么问题?

主要解决:行为请求者与行为实现者通常是一种紧耦合的关系

3.命令模式怎么使用?

关键定义三个角色:

  • 1、received 真正的命令执行对象。
  • 2、Command 命令,需要我执行的所有命令都这里声明。
  • 3、invoker 调用者,接收到命令,并执行命令。

三、命令模式示例代码

1.定义命令抽象类

package behavior.CommandPattern;

/**
 * 命令接口
 */
public abstract class Command {
    private String sql;

    public Command(String sql) {
        this.sql = sql;
    }

    public String getSql() {
        return sql;
    }

    public void setSql(String sql) {
        this.sql = sql;
    }

    public abstract void execute(String sql);
}

2. 具体的命令类

查询命令:

package behavior.CommandPattern;

public class QueryCommand extends Command{
    public QueryCommand(String sql) {
        super(sql);
    }
    @Override
    public void execute(String sql) {
        System.out.println("执行查询命令sql=>"+sql);
    }
}

新增命令:

public class InsertCommand extends Command {

    public InsertCommand(String sql) {
        super(sql);
    }

    @Override
    public void execute(String sql) {
        System.out.println("执行插入命令sql=>"+sql);
    }
}

修改命令:

public class UpdateCommand extends Command{
    public UpdateCommand(String sql) {
        super(sql);
    }

    @Override
    public void execute(String sql) {
        System.out.println("执行更新命令sql=>"+sql);
    }
}

删除命令:

public class DeleteCommand extends Command{

    public DeleteCommand(String sql) {
        super(sql);
    }

    @Override
    public void execute(String sql) {
        System.out.println("执行删除命令sql=>"+sql);
    }
}

3.定义命令调用者

public class Invoker {
    //什么命令
    private Command command;
    //客户发出命令
    public void setCommand(Command command){
        this.command = command;
    }
    //执行客户的命令
    public void executeSql(){
        this.command.execute(command.getSql());
    }
}

4.测试

public class CommandPatternDemo {
    public static void main(String[] args) {
        Invoker invoker = new Invoker();
        Command query = new QueryCommand("select * from table where condition");
        //设置命令
        invoker.setCommand(query);
        //执行命令
        invoker.executeSql();

        Command insert = new InsertCommand("insert into table() values()");
        //设置命令
        invoker.setCommand(insert);
        //执行命令
        invoker.executeSql();

        Command update = new UpdateCommand("update table set filed = value where condition ");
        //设置命令
        invoker.setCommand(update);
        //执行命令
        invoker.executeSql();
        Command delete = new DeleteCommand("delete from table where condition ");
        //设置命令
        invoker.setCommand(delete);
        //执行命令
        invoker.executeSql();
    }
}

打印输出:

执行查询命令sql=>select * from table where condition
执行插入命令sql=>insert into table() values()
执行更新命令sql=>update table set filed = value where condition 
执行删除命令sql=>delete from table where condition 

四 总结

命令模式在spring中jdbcTemplate中有使用,execute方法,接收sql命令进行执行语句。

你可能感兴趣的:(Java,命令模式,java,设计模式)