【问题标题】:What design pattern(s) to use to encapsulate a collection of functionalities使用什么设计模式来封装功能集合
【发布时间】:2017-04-19 18:13:28
【问题描述】:

假设有一组命令需要执行。一个命令可能需要一些输入参数,并且在执行之后,它可能会返回一些结果。一些设计注意事项是:

  • 命令在运行时创建
  • 命令创建基于用户输入
  • 命令输入可以被加密或压缩或两者兼有
  • 可能需要以特定于每个命令的方式创建不同的命令
  • 不同的命令可能有不同的输入数量和输入类型
  • 在运行时提供命令输入
  • 不同命令的结果可能有不同的类型

例如,一个命令可能是“GetFileList”,它接收列出其文件的路径并返回文件列表作为结果。在这种情况下,该命令有一个string 类型的输入并返回string[] 类型的结果。另一方面,命令“RenameFile”可能有两个string 类型的输入并返回boolean 值以指示成功或失败。

对于对象创建,我可以想到 FactoryStrategy 模式,但我想不出封装结果和输入参数的好方法。哪些设计模式可用于实现此场景?

【问题讨论】:

  • 我不知道模式。我想泛型将是要走的路,这取决于你的语言。 (你没有标记你的问题。)模式并不是所有问题的解决方案。不要落入带有图案的小男孩陷阱。
  • @duffymo 我编辑了问题并添加了该语言的标签。谢谢你的建议。我不是设计模式方面的专家,但我很想学习,每当我遇到问题时,我倾向于花一些时间找出是否有任何众所周知的模式可以解决它。
  • Java 具有利用泛型的更实用风格的接口。它们旨在适应 lambdas。我猜 C# 也已经有这样的东西了。

标签: c# design-patterns


【解决方案1】:

这是一个……

命令模式:)

简而言之,你必须有一个接口 ICommand 有一个方法 execute

Execute 方法可能是无效的或可能返回一些结果(可能以通用方式)。如果它是无效的,那么你必须有另一个通用方法,如 GetResult

创建方法时,可以在其构造函数中传递参数。

【讨论】:

  • 感谢'您可以在其构造函数中传递参数'。它已经困扰了我很长一段时间了。
【解决方案2】:

这里http://www.dofactory.com/net/command-design-pattern 是用示例解释命令设计模式的页面。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多