如何实现18种命令设计模式的应用场景?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1377个文字,预计阅读时间需要6分钟。
章节目录+ 命令设计模式 + 18.1 命令设计模式简介 + 18.1.1 命令设计模式概述 + 18.1.2 命令设计模式的UML类图 + 18.2 命令设计模式的实现
文章目录
- 十八、命令设计模式
- 18.1 命令设计模式简介
- 18.1.1 命令设计模式概述
- 18.1.2 命令设计模式的UML类图
- 18.2 命令设计模式的实现
- 18.3 命令设计模式的优缺点
十八、命令设计模式
18.1 命令设计模式简介
18.1.1 命令设计模式概述
命令设计模式(Command Pattern):命令模式是对命令的封装,将一个请求封装为一个对象,使发出请求的责任和执行请求的责任分割开。命令模式解耦了请求方和接收方,请求方只需要请求执行命令,不需要关心命令怎样被接收,怎样被操作以及是否被执行等;
在软件系统中,请求者与执行者通常是一种紧耦合关系,因为这些实现起来简单明了,但紧耦合的关系伴随着缺乏扩展性。在某些场合中,当对行为进行修改时必定要修改源代码。
而命令模式通过请求域实现间引入一个抽象命令接口,解耦和请求与实现,并且命令接口是抽象的,他由不同的子类实现,因此具备扩展性。命令模式的本质就是解耦命令与执行者;
18.1.2 命令设计模式的UML类图
命令设计模式主要包含如下4个角色:
- 1)接收者角色(Receiver):负责具体执行一个请求
- 2)抽象命令角色(ICommand):规范需要执行所有的命令行为
- 3)具体命令角色(ConcreteCommand):实现具体命令,其内部维护一个Receiver角色,具体功能交给Receiver实现
- 4)请求角色(Invoker):接收客户端命令,并执行命令;
18.2 命令设计模式的实现
设计一个点餐场景,客户把订单交给服务员,服务员将客户需求交给后厨,后厨接收到订单需求后开始做菜;
- 订单:命令(Command)
- 服务员:命令的发送者(Invoker)
- 后厨:命令接收者(Receiver)
- 1)命令接收者:
- 2)抽象命令:
- 3)具体命令-1:
- 4)具体命令-2:
- 5)命令请求/发送者:
- 6)测试代码:
18.3 命令设计模式的优缺点
- 优点:
- 1)解耦了命令请求与实现
- 2)可以在现有命令的基础上,增加额外功能,结合装饰模式会更加灵活
- 缺点:
- 1)使用命令模式造成具体命令类增多,系统结构更加复杂
本文共计1377个文字,预计阅读时间需要6分钟。
章节目录+ 命令设计模式 + 18.1 命令设计模式简介 + 18.1.1 命令设计模式概述 + 18.1.2 命令设计模式的UML类图 + 18.2 命令设计模式的实现
文章目录
- 十八、命令设计模式
- 18.1 命令设计模式简介
- 18.1.1 命令设计模式概述
- 18.1.2 命令设计模式的UML类图
- 18.2 命令设计模式的实现
- 18.3 命令设计模式的优缺点
十八、命令设计模式
18.1 命令设计模式简介
18.1.1 命令设计模式概述
命令设计模式(Command Pattern):命令模式是对命令的封装,将一个请求封装为一个对象,使发出请求的责任和执行请求的责任分割开。命令模式解耦了请求方和接收方,请求方只需要请求执行命令,不需要关心命令怎样被接收,怎样被操作以及是否被执行等;
在软件系统中,请求者与执行者通常是一种紧耦合关系,因为这些实现起来简单明了,但紧耦合的关系伴随着缺乏扩展性。在某些场合中,当对行为进行修改时必定要修改源代码。
而命令模式通过请求域实现间引入一个抽象命令接口,解耦和请求与实现,并且命令接口是抽象的,他由不同的子类实现,因此具备扩展性。命令模式的本质就是解耦命令与执行者;
18.1.2 命令设计模式的UML类图
命令设计模式主要包含如下4个角色:
- 1)接收者角色(Receiver):负责具体执行一个请求
- 2)抽象命令角色(ICommand):规范需要执行所有的命令行为
- 3)具体命令角色(ConcreteCommand):实现具体命令,其内部维护一个Receiver角色,具体功能交给Receiver实现
- 4)请求角色(Invoker):接收客户端命令,并执行命令;
18.2 命令设计模式的实现
设计一个点餐场景,客户把订单交给服务员,服务员将客户需求交给后厨,后厨接收到订单需求后开始做菜;
- 订单:命令(Command)
- 服务员:命令的发送者(Invoker)
- 后厨:命令接收者(Receiver)
- 1)命令接收者:
- 2)抽象命令:
- 3)具体命令-1:
- 4)具体命令-2:
- 5)命令请求/发送者:
- 6)测试代码:
18.3 命令设计模式的优缺点
- 优点:
- 1)解耦了命令请求与实现
- 2)可以在现有命令的基础上,增加额外功能,结合装饰模式会更加灵活
- 缺点:
- 1)使用命令模式造成具体命令类增多,系统结构更加复杂

