命令模式总结

1、正文:

命令模式(Command Pattern)是一种数据驱动的设计模式,它属于行为型模式。请求以命令的形式包裹在对象中,并传给调用对象。调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该对象执行命令。

2、什么是命令模式

命令模式是一个高内聚的模式,其定义为:将一个请求封装成一个对象,从而让你使用不同的请求把客户端参数化,对请 求排队或者记录请求日志,可以提供命令的撤销和恢复功能

3、命令模式的角色

a、Receiver接受者角色:该角色就是干活的角色,命令传递到这里是应该被执行的

b、Command命令角色:需要执行的所有命令都在这里声明

c、Invoker调用者角色:接收到命令,并执行命令

4、命令模式结构图

5、命令模式使用场景

使用时机:当需要先将一个函数登记上,然后再以后调用此函数时,就需要使用命令模式,其实这就是回调函数。

有时候需要向某些对象发送请求,但是并不知道请求的接收者是谁,也不知道被请求的操作是什么。此时希望用一种松耦合的方式来设计程序,使得请求发送者和请求接收者能够消除彼此之间的耦合关系

例子:拿订餐来说,客人需要向厨师发送请求,但是完全不知道这些厨师的名字和联系方式,也不知道厨师炒菜的方式和步骤。 命令模式把客人订餐的请求封装成 command 对象,也就是订餐中的订单对象这个对象可以在程序中被四处传递,就像订单可以从服务员手中传到厨师的手中。这样一来,客人不需要知道厨师的名字,从而解开了请求调用者和请求接收者之间的耦合关系

6、命令模式的优点:

a、它能较容易地设计一个命令队列

b、在需要的情况下,可以较容易地将命令记入日志

c、允许接收请求的一方决定是否要否决请求

d、可以容易地实现对请求的撤销和重做

e、由于加进新的具体命令类不影响其他类。因此增加新的具体命令类很容易。

g、命令模式把请求一个操作的对象与知道怎么执行一个操作的对象分割开。

7、命令模式的缺点:

 命令模式也是有缺点的,请看Command的子类:如果有N个命令,问题就出来 了,Command的子类就可不是几个,而是N个,这个类膨胀得非常大,这个就需要在项 目中慎重考虑使用

8、总结

命令模式的意图是将一个请求封装成一个对象,从而使您可以用不同的请求对客户进行参数化。

命令模式主要解决的问题是在软件系统中,行为请求者与行为实现者通常是一种紧耦合的关系,但某些场合,比如需要对行为进行记录、撤销或重做、事务等处理时,这种无法抵御变化的紧耦合的设计就不太合适。

在某些场合,比如要对行为进行"记录、撤销/重做、事务"等处理,这种无法抵御变化的紧耦合是不合适的。在这种情况下,如何将"行为请求者"与"行为实现者"解耦?将一组行为抽象为对象,可以实现二者之间的松耦合,这是命令模式的使用场景

系统需要支持命令的撤销(Undo)操作和恢复(Redo)操作,也可以考虑使用命令模式

命令模式的实现过程通过调用者调用接受者执行命令,顺序:调用者→接受者→命令。

发布了80 篇原创文章 · 获赞 1 · 访问量 3943

猜你喜欢

转载自blog.csdn.net/m18731455318/article/details/103149063