设计模式19——Command设计模式

Command命令设计模式将一个请求封装成一个对象,从而使你可用不同的请求对客户进行操作。Command命令设计模式是对命令的封装。命令模式把发出命令的责任和执行命令的责任分割开,委派给不同的对象。每一个命令都是一个操作,命令请求发出请求要求执行一个操作;命令接受方收到请求,并执行操作。命令模式允许命令请求方和命令接收方独立开来,使得命令请求方不必 知道命令接收方的接口,更不必知道请求是怎么被接收,以及操作是否被执行,何时被执行,以及是怎么被执行的。

Command命令设计模式结构如下:


Command命令设计模式中5个角色:

(1).客户角色:创建了一个具体命令对象并确定其接收者。 
(2).命令角色:声明了一个给所有具体命令类的抽象接口。这是一个抽象角色,通常由一个java接口或java抽象类实现。 
(3).具体命令角色:定义一个接受者和行为之间的弱耦合;实现execute方法,负责调用接收者的相应操作。execute方法通常叫做 执行方法。 
(4).请求者(Invoke)角色:负责调用命令对象执行请求,相关的方法叫做行动方法。 
(5).接收者(Receiver)角色:负责具体实施和执行一个请求。任何一个类都可以成为接收者,实施和执行请求的方法叫做行动方法。

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命令设计模式的优缺点:

优点: 解耦了命令请求者和接受者之间联系。请求者调用一个命令,接受者接受请求并执行相应的动作,因为使用Command模式解耦,请求者无需知道接受者任何接口。

缺点: 造成出现过多的具体命令类。

JDK中命令模式的应用:

java.lang.Runnable
javax.swing.Action
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值