我收到家庭作业。我无法决定要使用哪种设计模式。
我目前已经实施了策略模式。但是我的一些朋友正在实施工厂设计模式。我只需要验证即可。
这是问题所在
假设您正在一家新的启动公司工作,在那里您创建了一组专用算法。根据算法的输入和输出,可以很好地定义每种算法的接口。例如:
// 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编写),客户端组织可以将其用于:
获取实现相应算法的具体类的新实例。
屏蔽客户的代码,以防算法实现中的将来更改。也就是说,您需要设计合适的类,这些类将利用面向对象的编程原理来创建相关对象的族,而无需指定此类对象的具体类的名称。
答案 0 :(得分:3)
策略是在运行时使用同一API在多个不同算法之间进行选择,但是这种分配听起来并不像那样。有几件事为Factory辩护:
算法的API不同
此
获取实现相应算法的具体类的新实例。
这:
也就是说,您需要设计合适的类,这些类将利用面向对象的编程原理来创建相关对象的族,而无需指定此类对象的具体类的名称。
是的,Factory的每个算法都有一个公共接口,每个算法都有一个非公共的具体类,每个算法都有一个公共的工厂。 (有多种方法可以根据实现进行旋转,但是从概念上讲,这就是您所需要的。)
答案 1 :(得分:0)
工厂生产的东西符合接口(或超类),但实现方式可能有所不同。这似乎与“实现不断发展”的思想相符。