1.意图:
将一个请求或操作封装到对象中。
2.类图:
3.原理:
命令模式是对命令的封装,命令模式把发出命令的责任和执行命令的责任分割开。
每个命令都是一个操作:请求方发出请求要求执行一个操作,接收方收到请求并执行操作。命令模式允许请求方和接收方独立开来,使得请求方不必知道接收方的接口以及操作如何被执行。
4.特征:
请求者(Invoker): 负责发出命令请求。
接收者(Receiver):具体实施或执行一个请求。
抽象命令(Command):给出所有具体命令的抽象接口。
具体命令(ConcreteCommand):定义一个接收者和行为之间的弱耦合,实现抽象命令的方法,负责调用接收者的相应操作。
客户端(Client):创建一个具体的命令对象,并确定其接收者。
5.说明:
6.使用案例:
7.代码:
// Invoker.java请求者
public class Invoker
{
private Command command;
public Invoker(Command command)
{
this.command = command;
}
public void action()
{
command.execute();
}
}
// Command.java抽象命令
public interface Command
{
/**
* this method is called by client to execute this command
*/
void execute();
}
// ConcreteCommand.java 具体命令
public class ConcreteCommand implements Command
{
private Receiver receiver;
public ConcreteCommand(Receiver receiver)
{
this.receiver = receiver;
}
public void execute()
{
receiver.action();
}
}
// Receiver.java 接收者
public class Receiver
{
public Receiver()
{
}
public void action()
{
System.out.print("do some action");
}
}
// Client.java 客户端
public class Client
{
public static void main(String[] args)
{
Receiver receiver = new Receiver();
Command command = new ConcreteCommand(receiver);
Invoker invoker = new Invoker(command);
invoker.action();
}
}
将一个请求或操作封装到对象中。
2.类图:
3.原理:
命令模式是对命令的封装,命令模式把发出命令的责任和执行命令的责任分割开。
每个命令都是一个操作:请求方发出请求要求执行一个操作,接收方收到请求并执行操作。命令模式允许请求方和接收方独立开来,使得请求方不必知道接收方的接口以及操作如何被执行。
4.特征:
请求者(Invoker): 负责发出命令请求。
接收者(Receiver):具体实施或执行一个请求。
抽象命令(Command):给出所有具体命令的抽象接口。
具体命令(ConcreteCommand):定义一个接收者和行为之间的弱耦合,实现抽象命令的方法,负责调用接收者的相应操作。
客户端(Client):创建一个具体的命令对象,并确定其接收者。
5.说明:
6.使用案例:
7.代码:
// Invoker.java请求者
public class Invoker
{
private Command command;
public Invoker(Command command)
{
this.command = command;
}
public void action()
{
command.execute();
}
}
// Command.java抽象命令
public interface Command
{
/**
* this method is called by client to execute this command
*/
void execute();
}
// ConcreteCommand.java 具体命令
public class ConcreteCommand implements Command
{
private Receiver receiver;
public ConcreteCommand(Receiver receiver)
{
this.receiver = receiver;
}
public void execute()
{
receiver.action();
}
}
// Receiver.java 接收者
public class Receiver
{
public Receiver()
{
}
public void action()
{
System.out.print("do some action");
}
}
// Client.java 客户端
public class Client
{
public static void main(String[] args)
{
Receiver receiver = new Receiver();
Command command = new ConcreteCommand(receiver);
Invoker invoker = new Invoker(command);
invoker.action();
}
}