我正在实现一个类,负责处理来自 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.
}
}
}
它可以工作,但看起来不正确,如果一个屏幕有多种类型的网络请求,我被迫添加一个标志来跟踪它应该回调哪个函数。
有更好的方法吗?
谢谢,
泰贾。
最佳答案
使用回调接口(interface),例如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);
}
}
...
}
关于java - 黑莓设计模式问题:,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4927401/