设计模式19——Command设计模式
来源:互联网 发布:windows下dmg转换cdr 编辑:程序博客网 时间:2024/05/23 23:55
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
- 设计模式—Command模式
- 设计模式19——Command设计模式
- 设计模式19——Command设计模式
- 设计模式——command模式
- 设计模式——命令模式(Command)
- 设计模式——Command命令模式
- 设计模式之 — Command命令模式
- JAVA设计模式—命令模式(Command)
- 设计模式 command模式
- 设计模式----Command模式
- 设计模式:Command模式
- 【设计模式】Command模式
- 设计模式--Command 模式
- 设计模式-----COMMAND模式
- JavaScript设计模式学习——Command
- 设计模式笔记——Command
- Swift设计模式——Command Pattern
- 23种设计模式(19)---Command模式
- Smack 结合 Openfire服务器,建立IM通信,发送聊天消息
- OnScrollListener
- Maximum Depth of Binary Tree
- JavaWeb_JavaEE_命名规则
- java垃圾收集方法
- 设计模式19——Command设计模式
- FFmpeg windows平台编译
- android studio使用快捷键
- ArcGIS教程:按属性、形状或位置进行提取
- shell捕捉信号,重定向信号处理函数
- Android常用组件
- Ubuntu 安装 opensips
- 了解 GNU GPL/GNU LGPL/BSD/MIT/Apache协议
- Scrapy入门教程