命令模式实现将发起请求的对象与执行请求的对象解耦,但应该注意的是该模式会导致具体的命令类过多。
package com.depthmind.designpattern;
public class CommandPattern {
public static void main(String[] args) {
General general = new General();
Solider infantry = new Infantry();
Command command = new ConcreteCommand(infantry);
general.setCommand(command);
general.orderFight();
general.orderRetreat();
Solider cavalry = new Cavalry();
Command command1 = new ConcreteCommand(cavalry);
general.setCommand(command1);
general.orderFight();
}
}
interface Command {
void execute();
void undo();
}
interface Solider {
void fight();
void retreat();
}
class ConcreteCommand implements Command {
private Solider solider;
public ConcreteCommand(Solider solider) {
this.solider = solider;
}
@Override
public void execute() {
solider.fight();
}
@Override
public void undo() {
solider.retreat();
}
}
class Infantry implements Solider {
@Override
public void fight() {
System.out.println("Infantry Fight!");
}
@Override
public void retreat() {
System.out.println("Infantry Retreat!");
}
}
class Cavalry implements Solider {
@Override
public void fight() {
System.out.println("Cavalry Fight!");
}
@Override
public void retreat() {
System.out.println("Cavalry Fight!");
}
}
class General {
private Command command;
public void setCommand(Command command) {
this.command = command;
}
public void orderFight() {
command.execute();
}
public void orderRetreat() {
command.undo();
}
}