将数据从一个模块发送到另一个类型安全的模块

时间:2015-06-21 22:54:07

标签: java oop module data-exchange

我的问题

在没有类型安全的情况下,什么设计允许我在两个模块之间选择性地传递数据?这样的事情有可能吗?

解释

我有2个来自班级

的模块
abstract class Module {
    public abstract void init(App app);
    public abstract void exit(App app);
    public abstract void process(App app);
    public abstract void paint(Graphics g);
}

App类跟踪哪个模块是当前模块并允许该模块处理执行:

class App {
    private Map<Class<? extends Module>, Module> allModules = ...;
    private Module currentModule;

    //things to be used in modules
    private Canvas canvas;

    protected void start() {
        allModules.put(FirstModule.class, new FirstModule());
        //...

        currentModule = ...;
        currentModule.init(this);
    }

    protected void process() {
        currentModule.process(this);
    }

    protected void paint(Graphics g) {
        currentModule.paint(g);
    }

    public void switchModule(Class<? extends Module> module) {
        //perform validation
        Module next = allModules.get(module);

        currentModule.exit(this);
        currentModule = next;
        next.init(this);
    }

    //expose items that modules will use
    public Canvas getCanvas() {
        return canvas;
    }
}

现在,第一个模块负责收集用户指定的“设置”;它们将显示复选框以供选择,然后单击一个按钮,该按钮存储有关检查了哪个复选框的信息:

class First extends Module {
    private boolean firstBoxChecked, secondBoxChecked, thirdBoxChecked;

    public void init(App app) {
        canvas.addMouseListener(...);
    }

    public void process(App app) {
        if(buttonClicked) {
            app.switchModule(Second.class);
            //pass data to next module
        }
    }
}

因此,在执行模块的某个时刻,它将切换当前模块。有时我想在当前模块和我切换到的模块之间传递数据(从第一个到第二个)。

我的尝试

我能想到的唯一“高效”方式是复制Android的切换活动设计(使用类似Intent的对象):

ModuleSwitchAction action = new ModuleSwitchAction(Second.class);
action.put("firstBoxChecked", "true");
//...
app.switchModule(action);

另一个类中的人需要知道确切的密钥名称,如果他们搞砸了什么,在编译时没有任何警告。有没有更安全的方法来做到这一点?

1 个答案:

答案 0 :(得分:0)

我认为你所寻找的是“责任链”设计模式。 点击此处 - http://www.journaldev.com/1617/chain-of-responsibility-design-pattern-in-java-example-tutorial