使用命令模式时构造命令对象的首选模式
Preferred pattern for constructing command objects when using command pattern
我们正在尝试将命令模式应用到我们的一个项目中。每个命令对象都有不同种类和数量的参数。哪种模式最适合创建这些命令对象?我目前正在研究抽象工厂和构建器模式。我仍然是设计模式的业余爱好者。有人可以推荐最适合我要求的模式吗?
据我所知,传统上没有用于创建命令的模式。这是命令模式的 UML:
正如您在上面看到的,Client
直接耦合到 ConcreteCommand
,模式甚至说它创建了它们。
Every command object has a different kind and number of parameters.
此细节将使对象创建与客户端代码分离变得困难。
一个简单的方法是使用 so-called Simple Factory (aka Concrete Factory).
此处的目的是使用 CommandFactory.createCommand(...)
方法封装命令的创建。客户端代码不想知道 new CommandA(...)
等的详细信息
但是,由于每个具体命令的构造函数都有不同的参数,您需要客户端将该信息提供给 createCommand(...)
方法。在我看来,这种模式不会提供太多好处,因为无论有没有这种模式,客户都必须提供几乎相同数量的细节。如果您不想让客户端知道具体命令的确切名称,这可能会很好。
例如,如果没有简单工厂模式,Client
将不得不执行 new CommandA(arg1, arg2)
(直接耦合到具体命令)。对于简单工厂模式,Client
必须执行 CommandFactory.createCommand("A", arg1, arg2)
,其中 "A"(或类似的东西)是 ConcreteCommand 要创建的判别式。如果您在设计中添加了 CommandD
,Client
仍需要更改(它必须调用 createCommand("D", ...)
) 和 您将拥有更新 CommandFactory
。看起来很复杂却收效甚微。
使用工厂方法或抽象工厂模式似乎更复杂,但你的问题没有提供足够的细节来真正确定。
我们正在尝试将命令模式应用到我们的一个项目中。每个命令对象都有不同种类和数量的参数。哪种模式最适合创建这些命令对象?我目前正在研究抽象工厂和构建器模式。我仍然是设计模式的业余爱好者。有人可以推荐最适合我要求的模式吗?
据我所知,传统上没有用于创建命令的模式。这是命令模式的 UML:
正如您在上面看到的,Client
直接耦合到 ConcreteCommand
,模式甚至说它创建了它们。
Every command object has a different kind and number of parameters.
此细节将使对象创建与客户端代码分离变得困难。
一个简单的方法是使用 so-called Simple Factory (aka Concrete Factory).
此处的目的是使用 CommandFactory.createCommand(...)
方法封装命令的创建。客户端代码不想知道 new CommandA(...)
等的详细信息
但是,由于每个具体命令的构造函数都有不同的参数,您需要客户端将该信息提供给 createCommand(...)
方法。在我看来,这种模式不会提供太多好处,因为无论有没有这种模式,客户都必须提供几乎相同数量的细节。如果您不想让客户端知道具体命令的确切名称,这可能会很好。
例如,如果没有简单工厂模式,Client
将不得不执行 new CommandA(arg1, arg2)
(直接耦合到具体命令)。对于简单工厂模式,Client
必须执行 CommandFactory.createCommand("A", arg1, arg2)
,其中 "A"(或类似的东西)是 ConcreteCommand 要创建的判别式。如果您在设计中添加了 CommandD
,Client
仍需要更改(它必须调用 createCommand("D", ...)
) 和 您将拥有更新 CommandFactory
。看起来很复杂却收效甚微。
使用工厂方法或抽象工厂模式似乎更复杂,但你的问题没有提供足够的细节来真正确定。