命令模式的目的是将请求的调用者和请求的实际执行者分离解耦:
package com.djk.design.action.command;
public interface Command
{
void execute();
}
package com.djk.design.action.command;
public class TrunOffLightCommand implements Command
{
private Light light;
public TrunOffLightCommand(Light light) {
super();
this.light = light;
}
@Override
public void execute() {
if (null == light)
{
System.out.println("没有执行者");
}else
{
light.trunOff();
}
}
}
package com.djk.design.action.command;
public class TrunOnLightCommand implements Command
{
private Light light;
public TrunOnLightCommand(Light light) {
super();
this.light = light;
}
@Override
public void execute()
{
if (null == light)
{
System.out.println("没有执行者");
}else
{
light.trunOn();
}
}
}
package com.djk.design.action.command;
public class Receiver
{
private Command trunOnCommand;
private Command trunOffCommand;
public Receiver(Command trunOnCommand, Command trunOffCommand) {
super();
this.trunOnCommand = trunOnCommand;
this.trunOffCommand = trunOffCommand;
}
public void trunLight()
{
if (null != trunOnCommand)
{
trunOnCommand.execute();
}
}
public void trunOffLight()
{
if (null != trunOffCommand)
{
trunOffCommand.execute();
}
}
}
package com.djk.design.action.command;
public class Light
{
public void trunOn()
{
System.out.println("开灯");
}
public void trunOff()
{
System.out.println("关闭");
}
}
package com.djk.design.action.command;
public class Client
{
public static void main(String[] args)
{
Light light = new Light();
Receiver receiver = new Receiver(new TrunOnLightCommand(light), new TrunOffLightCommand(light));
receiver.trunLight();
receiver.trunOffLight();
}
}