# 23种设计模式-命令模式
# 1.命令模式
将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可取消的操作。
# 优缺点
# 优点:
降低耦合 扩展性高
# 缺点:
增加复杂
# 使用场景
# 实现方式
# 抽象命令类:Command.java
/**
* Command命令接口,为所有的命令声明一个接口。所有的命令都应该实现它
*/
public interface Command {
public void execute();
}
# 电视机类:Television.java
public class Television {
public void open(){
System.out.println("打开电视机......");
}
public void close(){
System.out.println("关闭电视机......");
}
public void changeChannel(){
System.out.println("切换电视频道......");
}
}
# 遥控器类:Controller.java
public class Controller {
private Command openTVCommand;
private Command closeTVCommand;
private Command changeChannelCommand;
public Controller(Command openTvCommand,Command closeTvCommand,Command changeChannelCommand){
this.openTVCommand = openTvCommand;
this.closeTVCommand = closeTvCommand;
this.changeChannelCommand = changeChannelCommand;
}
/**
* 打开电视剧
*/
public void open(){
openTVCommand.execute();
}
/**
* 关闭电视机
*/
public void close(){
closeTVCommand.execute();
}
/**
* 换频道
*/
public void change(){
changeChannelCommand.execute();
}
}
# 遥控器的三个按钮:
public class OpenTvCommand implements Command{
private Television tv;
public OpenTvCommand(Television tv){
this.tv = tv;
}
public void execute() {
tv.open();
}
}
public class ChangeChannelCommand implements Command{
private Television tv;
public ChangeChannelCommand(Television tv){
this.tv = tv;
}
public void execute() {
tv.changeChannel();
}
}
public class CloseTvCommand implements Command{
private Television tv;
public CloseTvCommand(Television tv){
this.tv = tv;
}
public void execute() {
tv.close();
}
}
# 测试类
public class Client {
public static void main(String a[])
{
Television tv = new Television();
Command openCommand,closeCommand,changeCommand;
openCommand = new OpenTvCommand(tv);
closeCommand = new CloseTvCommand(tv);
changeCommand = new ChangeChannelCommand(tv);
Controller control = new Controller(openCommand,closeCommand,changeCommand);
control.open(); //打开电视机
control.change(); //换频道
control.close(); //关闭电视机
}
}
参考博客:https://blog.csdn.net/a745233700/article/details/83713445