命令模式:
代码如下:
public class App {
public static void main(String[] args) {
Wizard wizard=new Wizard();
Goblin goblin=new Goblin();
goblin.printStatus();
wizard.castSpell(new ShrinkSpell(), goblin);
goblin.printStatus();
wizard.castSpell(new InvisibilitySpell(), goblin);
goblin.printStatus();
wizard.undoLastSpell();
goblin.printStatus();
wizard.undoLastSpell();
goblin.printStatus();
wizard.redoLastSpell();
goblin.printStatus();
wizard.redoLastSpell();
goblin.printStatus();
}
}
public abstract class Command {
public abstract void execute(Target target);
public abstract void undo();
public abstract void redo();
@Override
public abstract String toString() ;
}
public class Goblin extends Target {
public Goblin(){
setSize(Size.NORMAL);
setVisibility(Visibility.VISIBLE);
}
@Override
public String toString() {
return "Goblin";
}
}
public class InvisibilitySpell extends Command{
private Target target;
@Override
public void execute(Target target) {
target.setVisibility(Visibility.INVISIBLE);
this.target=target;
}
@Override
public void undo() {
if(target!=null){
target.setVisibility(Visibility.VISIBLE);
}
}
@Override
public void redo() {
if(target!=null){
target.setVisibility(Visibility.INVISIBLE);
}
}
@Override
public String toString() {
return "看不见";
}
}
public class ShrinkSpell extends Command{
private Size oldSize;
private Target target;
@Override
public void execute(Target target) {
oldSize=target.getSize();
target.setSize(Size.SMALL);
this.target=target;
}
@Override
public void undo() {
if(oldSize!=null&&target!=null){
Size temp=target.getSize();
target.setSize(oldSize);
oldSize=temp;
}
}
@Override
public void redo() {
undo();
}
@Override
public String toString() {
return "缩小了";
}
}
public enum Size {
SMALL("small"), NORMAL("normal");
private String title;
Size(String title){
this.title=title;
}
@Override
public String toString() {
return title;
}
}
这里写代码片