使用哪种设计模式策略或工厂设计?



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

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

这就是问题所在:

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

// 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 中),客户端组织可以使用这些类来:

获取实现相应算法的具体类的新实例。

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

策略是在运行时使用相同的 API 在多个不同的算法之间进行选择,但这个分配听起来不像那样。有几件事为工厂辩护:

  • 算法的 API 不同

  • 获取实现相应算法的具体类的新实例。

  • 而这个:

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

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

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

最新更新