我正在研究API,该API应该提供对许多基于远程Web服务的资源的简单访问.
其中一些远程资源需要在交互之前传递特殊参数.例如,其中一个需要传递一对开发人员的密钥,另一个则需要一对密钥和唯一的标识符.第三者根本不需要这些参数.我正在使用3个服务,但可以增加数量.
对于每个Web服务,我都有相应的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:
相同的变体,但参数不是传递给工厂方法,而是传递给Service实例(例如,在其init()方法中).
优点:用户可以根据需要更改其服务的密钥,而无需创建相同服务的新实例.
缺点:更复杂的方式,利润是可疑的.
您喜欢哪种变体?为什么?欢迎您的变体.