需求
电视机遥控器之练习题:
• 电视机是请求的接收者,遥控器是请求的发送者,遥控器上有一些按钮, 不同的按钮对应电视机的不同操作。抽象命令角色由一个命令接口来扮 演,有三个具体的命令类实现了抽象命令接口,这三个具体命令类分别 代表三种操作:打开电视机、关闭电视机和切换频道。显然,电视机遥 控器就是一个典型的命令模式应用实例。
类图
项目结构
运行截图
代码
package command.homeworkTV;
//命令接口
public interface AbstractCommand {
void execute(String name) throws Exception;
}
package command.homeworkTV;
//请求者
public class Controller implements AbstractCommand {
AbstractCommand openCommand;
AbstractCommand closeCommand;
AbstractCommand changeCommand;
public Controller(AbstractCommand openCommand, AbstractCommand closeCommand, AbstractCommand changeCommand) {
this.openCommand = openCommand;
this.closeCommand = closeCommand;
this.changeCommand = changeCommand;
}
@Override
public void execute(String name) throws Exception {
System.out.println("execute");
}
public void open(String name) throws Exception {
openCommand.execute(name);
}
public void close(String name) throws Exception {
closeCommand.execute(name);
}
public void changeChannel(String name) throws Exception {
changeCommand.execute(name);
}
}
package command.homeworkTV;
//接收者
public class Television {
public void open(String name) {
System.out.println("打开电视"+name);
}
public void close(String name) {
System.out.println("关闭电视"+name);
}
public void changeChannel(String name) {
System.out.println("换台"+name);
}
}
package command.homeworkTV;
public class TVOpenCommand implements AbstractCommand {
Television peopleReceiver;
public TVOpenCommand(Television peopleReceiver) {
this.peopleReceiver = peopleReceiver;
}
@Override
public void execute(String name) throws Exception {
peopleReceiver.open(name);
}
}
package command.homeworkTV;
public class TVCloseCommand implements AbstractCommand {
Television peopleReceiver;
public TVCloseCommand(Television peopleReceiver) {
this.peopleReceiver = peopleReceiver;
}
@Override
public void execute(String name) throws Exception {
peopleReceiver.close(name);
}
}
package command.homeworkTV;
public class TVChangeCommand implements AbstractCommand {
Television peopleReceiver;
public TVChangeCommand(Television peopleReceiver) {
this.peopleReceiver = peopleReceiver;
}
@Override
public void execute(String name) throws Exception {
peopleReceiver.changeChannel(name);
}
}
package command.homeworkTV;
public class TestUse {
public static void main(String args[]) throws Exception{
//接收者
Television rec = new Television();
//命令
TVOpenCommand createA = new TVOpenCommand(rec);
TVCloseCommand createB = new TVCloseCommand(rec);
TVChangeCommand createC = new TVChangeCommand(rec);
//请求者
Controller client = new Controller(createA, createB, createC);
//执行命令
client.open("海信");
client.changeChannel("换cctv1");
client.changeChannel("换cctv9");
client.close("海信");
//执行命令
client.open("长虹");
client.changeChannel("换cctv1");
client.changeChannel("换cctv9");
client.close("长虹");
}
}