【问题标题】:Which design pattern to use strategy or factory design?使用策略还是工厂设计的设计模式?
【发布时间】:2019-04-01 16:44:41
【问题描述】:

我收到了一份家庭作业。我无法决定使用哪种设计模式。

我目前已经实施了策略模式。但是我的一些朋友正在实施工厂设计模式。我只需要同样的验证。

这就是问题所在:

假设您在一家新成立的初创公司工作,在那里您创建了一组专门的算法。每种算法的接口在算法的输入和输出方面都有很好的定义。例如:

// Class: AlgorithmFn1
public java.util.List compute(java.util.Map<String, Float> data)

// Class: AlgorithmFn2
public java.util.Map<String, Integer> compute(java.util.Collection data)

等等……

这家初创公司计划将这些专用算法作为库(.jar 文件)出售给其客户组织,用于他们的软件应用程序。这些算法的内部实现在不影响算法接口的情况下不断发展。

您需要实现一组合适的类(在 Java 中),客户组织可以使用这些类:

获取实现各自算法的具体类的新实例。

保护客户的代码免受未来算法实现的更改。也就是说,您需要设计合适的类,这些类将利用面向对象的编程原则来创建相关对象的族,而无需指定这些对象的具体类的名称。

【问题讨论】:

  • 听起来像工厂。
  • 为什么是工厂模式?

标签: java design-patterns


【解决方案1】:

策略是在运行时使用相同的 API 在多个不同算法之间进行选择,但这个任务听起来不像那样。有几件事支持 Factory:

  • 算法的API不同

  • 这个

    获取实现各自算法的具体类的新实例。

  • 还有这个:

    也就是说,您需要设计合适的类,这些类将利用面向对象的编程原则来创建相关对象的族,而无需指定这些对象的具体类的名称。

所以是的,每个算法都有一个公共接口的工厂,每个算法都有一个非公共的具体类,每个算法都有一个公共工厂。 (在实现方面有多种方法可以实现,但从概念上讲,这就是您要寻找的。)

【讨论】:

    【解决方案2】:

    工厂生产的东西符合接口(或超类),但实现可能会有所不同。这似乎符合“实施不断发展”的想法。

    【讨论】:

      最近更新 更多