我正在研究 API,它应该提供对许多基于远程 Web 服务的资源的简单访问。
其中一些远程资源需要在交互之前传递特殊参数。例如,其中一个需要传递一对开发者的密钥,另一个需要一对密钥和唯一标识符。第三个根本不需要这些参数。我现在正在使用 3 项服务,但它们的数量可以扩大。
对于每个网络服务,我都有相应的 API 实现。问题是我不知道如何向我的 API 引入传递未知数量的未知含义的字符串的可能性。
我的一些建议:
1.
ServiceFactory.createService (ServiceEnum type, Properties keys);
2.
ServiceFactory.createService (ServiceEnum type, ServiceParams params);
其中 ServiceParams 是一个标记接口。在这种情况下,我将有一些这样的助手类:
public class ServiceHelper {
public static ServiceParams createFirstServiceParams (String secretKey, String publicKey);
public static ServiceParams createSecondServiceParams (String secretKey, String publicKey, String uid);
public static ServiceParams createThirdServiceParams ();
}
优点:每个服务的有意义的参数名称。
缺点:如果我为第四项服务提供支持,那么用户将不得不更新工厂模块。在第一种情况下,用户只需下载新模块。
3.
ServiceFactory.createService (ServiceEnum type, String ... params);
优点:最容易使用。用户不需要做任何额外的动作(比如创建 ServiceParams 的属性)。
缺点:最不明显的方式。用户应该知道哪一组参数对应于他想要创建的服务。
4-6:
相同的变体,但参数不是传递给工厂方法,而是传递给服务实例(例如在它的 init() 方法中)。
优点:用户可以根据需要更改其服务的密钥,而无需创建同一服务的新实例。
缺点:方式比较复杂,利润值得商榷。
您更喜欢哪种变体?为什么?欢迎您的变体。