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

时间:2019-04-01 16:44:42

标签: java design-patterns

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

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

这是问题所在

  

假设您正在一家新的启动公司工作,在那里您创建了一组专用算法。根据算法的输入和输出,可以很好地定义每种算法的接口。例如:

// 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编写),客户端组织可以将其用于:

     

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

     

屏蔽客户的代码,以防算法实现中的将来更改。也就是说,您需要设计合适的类,这些类将利用面向对象的编程原理来创建相关对象的族,而无需指定此类对象的具体类的名称。

2 个答案:

答案 0 :(得分:3)

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

  • 算法的API不同

  •   

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

  • 这:

      

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

是的,Factory的每个算法都有一个公共接口,每个算法都有一个非公共的具体类,每个算法都有一个公共的工厂。 (有多种方法可以根据实现进行旋转,但是从概念上讲,这就是您所需要的。)

答案 1 :(得分:0)

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