gpt4 book ai didi

java - 黑莓设计模式问题:

转载 作者:行者123 更新时间:2023-12-01 19:19:39 25 4
gpt4 key购买 nike

我正在实现一个类,负责处理来自 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com