java - 黑莓设计模式问题:

标签 java design-patterns blackberry

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

相关文章:

java - Angular 6 和 spring boot 通过基于 session 的登录记住我

iphone - 在 Cocoa Touch 中处理 UI 与行为问题的子类替代方法

java - 调试时收到 net_rim_os not found 警告

iphone - 是否有任何工具可以在 iPhone 和黑莓移动应用程序中自动编写测试用例?

ios - 良好的动态 iOS 应用程序出现错误 "provisioning with enterprise failed"

java - Selenium 和 Thread.Sleep 中 Wait 方法的区别

java - addFieldError 中出现错误 <s :select> in Struts2

java - 静态方法和多态性

design-patterns - 如何解决像 "design a vending machine"这样的设计问题

c++ - 父子关系所有权的推荐模式