
/** *//**
* @author LX
* 通用Reveiver類
*/

public abstract class Receiver
{
//抽象接收者,定義每個(gè)接收者必須完成的業(yè)務(wù)
public abstract void doSomething();
//撤銷
public abstract void undo();
}

/** *//**
*抽象Command類
**/

public abstract class Command
{
public abstract void execute();
public abstract void undo();
}

/** *//**
*調(diào)用者類
**/

public class Invoker
{
private Command command;

public void setCommand(Command command)
{
this.command=command;
}

public void action()
{
this.command.execute();
}
}

/** *//**
*具體接收者
**/

public class ConcreteReceiver1 extends Receiver
{

@Override

public void doSomething()
{
}

@Override

public void undo()
{
}
}

/** *//**
*具體Command類
**/

public class ConcreteCommand1 extends Command
{
private Receiver receiver;

public ConcreteCommand1(Receiver receiver)
{
this.receiver=receiver;
}
@Override

public void execute()
{
receiver.doSomething();
}

@Override

public void undo()
{
receiver.undo();
}
}

/** *//**
*測試類
**/

public class Test
{

public static void main(String[] args)
{
Invoker invoker = new Invoker();
Receiver receiver = new ConcreteReceiver1(); //定義接收者
Command command = new ConcreteCommand1(receiver);//定義一個(gè)發(fā)送給接收者的命令
invoker.setCommand(command);//把命令交給調(diào)用者去執(zhí)行
invoker.action();
}
}
//更完美的Command類

public abstract class Command
{
//定義一個(gè)子類的全局共享變量
protected final Receiver receiver;
//實(shí)現(xiàn)類必須定義一個(gè)接收者

public Command(Receiver receiver)
{
this.receiver=receiver;
}
//每個(gè)命令類都必須有一個(gè)執(zhí)行命令的方法
public abstract void execute();
}

public class ConcreteCommand1 extends Command
{
//設(shè)置自己的默認(rèn)構(gòu)造

public ConcreteCommand1()
{
super(new ConcreteReceiver1());
}
//設(shè)置新的接收者

public ConcreteCommand1(Receiver receiver)
{
super(receiver);
}
//業(yè)務(wù)處理
@Override

public void execute()
{
super.receiver.doSomething();
}
}

public class Test
{

public static void main(String[] args)
{
Invoker invoker = new Invoker();
Command command = new ConcreteCommand1(); //無需知道具體接收者
invoker.setCommand(command);
invoker.action();
}
}