以下是我的界面 -
public interface IClient {
public String executeSync(ClientInput input);
}
这是我对界面的实现 -
public class TestingClient implements IClient {
@Override
public String executeSync(ClientInput input) {
}
}
现在我有一个工厂,可以像这样得到TestingClient
的实例 -
IClient client = TestingClientFactory.getInstance();
现在,客户打算拨打接受executeSync
参数的TestingClient
ClientInput
方法,下面是ClientInput
的类。
public final class ClientInput {
private Long userid;
private Long clientid;
private Long timeout = 20L;
private boolean debug;
private Map<String, String> parameterMap;
public ClientInput(Long userid, Long clientid, Map<String, String> parameterMap, Long timeout, boolean debug) {
this.userid = userid;
this.clientid = clientid;
this.parameterMap = parameterMap;
this.timeout = timeout;
this.debug = debug;
}
... //getters here
}
因此,当客户拨打我们executeSync
的{{1}}方法时,他们会像这样创建TestingClient
参数,然后使用工厂获取ClientInput
的实例然后相应地调用executeSync方法。
TestingClient
问题陈述: -
Map<String, String> paramMap = new HashMap<String, String>();
paramMap.put("attribute", "segmentation");
ClientInput input = new ClientInput(109739281L, 20L, paramMap, 1000L, true);
IClient client = TestingClientFactory.getInstance();
client.executeSync(input);
参数并传递给ClientInput
方法的正确方法吗?答案 0 :(得分:1)
对于这个Case Better Go with Setters and Getters所有这些字段而不是Constructor
private Long userid;
private Long clientid;
private Long timeout = 20L;
private boolean debug;
private Map<String, String> parameterMap;
答案 1 :(得分:1)
如果您有更多参数,请使用构建器模式。这使代码干净。 (参见this示例)
例如,你可以
clientinput.userid("userid)
.clientid("clientid")
如果未指定,某些参数可以是可选的。就像没有设置超时和调试一样,它们可以采用默认值
答案 2 :(得分:0)
我建议你选择安装员和吸气剂 因为将来你的Object(state)可能会增加,这总是要求你在构造函数中进行更改。
答案 3 :(得分:0)
1听起来不错,就像你做的那样。方法将包含所有信息的包装对象作为参数 - &gt;好的设计就好像对象中的信息发生了变化,方法不需要改变。显然比采用5种不同参数的方法更好。
2我认为调用该方法的常用方法是:
Map<String, String> paramMap = new HashMap<String, String>();
paramMap.put("attribute", "segmentation");
ClientInput input = new ClientInput(user.getUserId(), client.getClientId(), 20L, paramMap, 1000L, true);
IClient client = TestingClientFactory.getInstance();
client.executeSync(input);
所以它应该足够清楚并且可以避免错误
3。如果可能出现更多参数,请尝试将它们分组到其他一些包装类中,然后将用于创建调用对象(组合)。