看过之前的项目中如何使用命令模式后,我可以理解它在多线程(并行)编程中的用途,因为命令可以在不同的线程中执行。当需要在命令之间传递数据时,可以将数据存储在共享内存中,并且可以将指向该数据的指针(或句柄)传递给不同线程上的调用程序。
然而,装饰器模式似乎有所有事情都必须发生在单个线程上的限制,因为装饰器必须直接调用委托,这意味着它们必须在同一个线程上。
我对这个限制的理解正确吗?相反,是否可以在多个线程上运行装饰器?
我正在尝试实现的是一个处理数据流的管道。
- 要实现为命令模式,它的
execute
方法需要两个参数:输入缓冲区和输出缓冲区。 - 为了实现装饰器模式,它的
getdata
方法将调用它的委托来获取上一步的结果,应用它自己的处理,并将结果返回给调用者。
然而,在我以两种风格实现它之后,我发现每种风格都有我最初并不清楚的限制。
- 使用命令模式时,我可以通过使用新缓冲区开始接受更多输入数据,而早期的缓冲区正在由运行在单独工作线程中的一些命令处理。我似乎无法用装饰器模式做到这一点。
- 使用装饰器模式时,装饰器可以对其委托进行任意数量的调用,并能够将结果组合成一个块。它还可以拆分数据,方法是发出一个大请求,缓存它,然后返回它的一部分。当我使用带有一个输入缓冲区和一个输出缓冲区的命令模式时,不能有任何组合或拆分结果。