1 例如:
public class ARMDispa
{
public void populate(HttpServletRequest request){
String [] values = request.getParameterVa!ues(pageStateName) ;
if (values != null && values.length > 0)
{
marketBindings.put(pageStateName + getDateStamp() ,
values [0]);
}
}
}
我们可以将参数类型外覆起来,从而完全解除对API接口的依赖。
public class ARMDispatcher
{
public void populate( ParameterSource source)
{
String values source.getParameterForName(pageStateName) ;
if (value != null) {
marketBindings.put(pageStateName + getDateStamp() ,
value) ;
}
}
}
我们引入了一个新的接口ParameterSource,目前它上
面只有一个getParameterForNarne方法。和HttpS ervl etRequ es t 的getParmeterValue不
一样, getParameterForName只返回一个串。之所以这样编写该方法是因为在当前的上下文中
我们只关心第一个参数。
接口应传达职责而非实现细节. 这样的接口令代码易于阅读和维护.
以下是一个实现了Pa rarneterSource的"伪" 类。可以将它用在我们的测试中:
class FakeParameterSource implements ParameterSource
{
public String value;
public String getParameterForName(String name )
return value;
}
}
而产品代码用的ParameterSource实现则看起来像这样
class ServletParameterSource implements ParameterSource
{
private HttpServletRequest request;
public ServletParameterSource(HttpServletRequest request)
{
this.request = request;
}
public String getParameterValue(String name)
{
String[] values = request.getparameterValues(name);
if (values == null || values.length < 1)
{
return null;
}
return values[0];
}
}