命令模式
定义:将一个请求封装为一个对象,使发出请求的责任和执行请求的责任分割开。这样两者之间通过命令对象进行沟通,这样方便将命令对象进行储存、传递、调用、增加与管理。
以遥控器为例,我们只需要按一下遥控器的开关按钮,遥控器就会通知到电视,执行开关机操作。
代码如下:
public class CommandTest {
public static void main(String[] args) {
Command powerOn = new PowerOn();
Command changeChannel = new ChangeChannel();
RemoteControl remoteControl = new RemoteControl(powerOn);
remoteControl.call();
System.out.println("---------------------");
remoteControl.setCommand(changeChannel);
remoteControl.call();
}
}
// 遥控器
class RemoteControl {
Command command;
public RemoteControl(Command command) {
this.command = command;
}
public Command getCommand() {
return command;
}
public void setCommand(Command command) {
this.command = command;
}
void call() {
System.out.println("遥控器收到命令");
this.command.action();
}
}
interface Command {
void action();
}
// 开机
class PowerOn implements Command {
private Tv tv;
@Override
public void action() {
tv.action();
System.out.println("开机");
}
public PowerOn() {
tv = new Tv();
}
}
// 换台
class ChangeChannel implements Command {
private Tv tv;
@Override
public void action() {
tv.action();
System.out.println("换台");
}
public ChangeChannel() {
tv = new Tv();
}
}
class Tv {
public void action() {
System.out.println("Tv执行操作...");
}
}
参考资料:
1.http://c.biancheng.net/view/1380.html
代码地址:https://gitee.com/zhoujie1/design-mode-and-principle.git