Command命令设计模式将一个请求封装成一个对象,从而使你可用不一样的请求对客户进行操做。Command命令设计模式是对命令的封装。命令模式把发出命令的责任和执行命令的责任分割开,委派给不一样的对象。每个命令都是一个操做,命令请求发出请求要求执行一个操做;命令接受方收到请求,并执行操做。命令模式容许命令请求方和命令接收方独立开来,使得命令请求方没必要 知道命令接收方的接口,更没必要知道请求是怎么被接收,以及操做是否被执行,什么时候被执行,以及是怎么被执行的。 java
Command命令设计模式结构以下: 设计模式
Command命令设计模式中5个角色: this
(1).客户角色:建立了一个具体命令对象并肯定其接收者。
(2).命令角色:声明了一个给全部具体命令类的抽象接口。这是一个抽象角色,一般由一个java接口或java抽象类实现。
(3).具体命令角色:定义一个接受者和行为之间的弱耦合;实现execute方法,负责调用接收者的相应操做。execute方法一般叫作 执行方法。
(4).请求者(Invoke)角色:负责调用命令对象执行请求,相关的方法叫作行动方法。
(5).接收者(Receiver)角色:负责具体实施和执行一个请求。任何一个类均可以成为接收者,实施和执行请求的方法叫作行动方法。 spa
Command命令设计模式例子代码以下: 设计
//请求者角色 class Invoker{ private Command command; public Invoker(Command command){ this.command = command; } public void action(){ command.execute(); } } //接收者 class Receiver{ //行动方法 public void action(){ System.out.println("Action has been taken."); } } //抽象命令角色 interface Command{ void execute(); } //具体命令类 class ConcreteCommand implements Command{ private Receiver receiver; public ConcreteCommand(Receiver receiver){ this.receiver = receiver; } public void execute(){ receiver.action(); } } //客户端 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(); } }
Command命令设计模式的优缺点: code
优势: 解耦了命令请求者和接受者之间联系。请求者调用一个命令,接受者接受请求并执行相应的动做,由于使用Command模式解耦,请求者无需知道接受者任何接口。缺点: 形成出现过多的具体命令类。 对象
JDK中命令模式的应用: 接口