简介
将“请求”封装成对象,以便使用不同的请求、队列或者日志来参数化其他对象。命令模式也支持可撤销的操作。(简化: 将请求封装成对象,将动作请求者和动作执行者解耦。)
实际应用场景
假设现在有电视、电脑、电灯等家电,现在需要你做个遥控器控制所有家电的开关,要求做到每个按钮对应的功能供用户个性化,对于新买入家电要有非常强的扩展性
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