我正在实现一个类,该类负责我来自Blackberry的所有HTTP请求。我大约有10个左右的屏幕使用此类来查询Web服务并从中获取数据。在这种情况下使用的标准模式是什么?
目前,我将其设置如下-
public class NetworkAccessClass
{
public NetworkAccessClass(String url, String methodName, Vector paramNames, Vector paramValues, MainScreen screen) {
// perform inits
}
public void run() {
// Get Data
if(screen.instanceOf(LoginScreen)) {
((LoginScreen) screen).requestSucceded(responseData);
}
// So on for all 10 screens.
catch() {
((LoginScreen) screen).requestFailed(errorCode);
// So on for all 10 screens.
}
}
}
它可以工作,但是看起来不正确,如果单个屏幕上有多种类型的网络请求,我将被迫添加一个标志来跟踪它应该回调的功能。
有一个更好的方法吗?
谢谢,
特雅
最佳答案
使用回调接口,例如ResponseHandler
:
public class NetworkAccessClass
{
public interface ResponseHandler {
void requestSucceeded(ResponseData responseData);
void requestFailed(ErrorCode errorCode);
}
public NetworkAccessClass(
String url,
String methodName,
Vector paramNames,
Vector paramValues,
ResponseHandler responseHandler) {
// perform inits
}
public void run() {
// Get Data
try {
...
responseHandler.requestSuceeded(responseData);
catch() {
responseHandler.requestFailed(errorCode);
}
}
}
希望这可以使NetworkAccessClass脱离对所有屏幕的了解。然后屏幕要么实现
NetworkAccessClass.ResponseHandler
,要么它们传递适配器处理程序(匿名内部类)以在屏幕上调用适当的方法,例如class LoginScreen {
...
new NetworkAccessClass(url, methodName, paramNames, paramValues,
new ResponseHandler() {
@Override
void requestSucceeded(ResponseData responseData) {
LoginScreen.this.handleLoginSuccess(responseData);
}
@Override
void requestFailed(ErrorCode errorCode) {
LoginScreen.this.handleLoginFailure(errorCode);
}
}
...
}