我收到了家庭作业。我无法决定使用哪种设计模式。
我目前已实施策略模式。但是我的一些朋友正在实施工厂设计模式。我只需要验证相同的内容。
这就是问题所在:
假设您正在一家新创业公司工作,在那里您已经创建了一组专用算法。每种算法的接口在算法的输入和输出方面都有很好的定义。例如:
// 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 不同
-
这
获取实现相应算法的具体类的新实例。
-
而这个:
也就是说,您需要设计合适的类,这些类将利用面向对象的编程原则来创建相关对象的族,而无需指定此类对象的具体类的名称。
所以是的,工厂每个算法都有一个公共接口,每个算法都有一个非公共具体类,每个算法都有一个公共工厂。(在实现方面有多种方法可以旋转它,但从概念上讲,这就是你正在寻找的。
工厂生产的东西符合接口(或超类),但实现可能会有所不同。这似乎符合"实现不断发展"的想法。