2

我的骰子模拟器会根据用户的输入和模型改变其 UI。我一直在尝试实现 Builder 模式来处理变化和可选参数,同时允许使用 GroupLayout。

目前我正在控制器中进行这样的调用:

if ((model.simRolls <> null) && (inputEvent.getSource == outputBtn) && (model.testType.equals("Success"))) {
    SimView outputScreen = new SimView.Builder(jframe, jpanel).testLabel("SUCCESS TEST OUTPUT", GroupAlignment.LEADING).outputLabel(model.simRolls, GroupAlignment.CENTER).actionButton("Next", GroupAlignment.TRAILING).build();
}

我讨厌 if 语句,因为它们种类繁多。谁能帮我理解我可以使用什么抽象或合同或接口来干净、准确地在 MVC 中构建所需的 UI?

4

2 回答 2

2

与其尝试处理你的无限组合if-statement,为什么不把子句分解成几个更细化的子句呢?这样,如果您添加更多新功能,那么您可以轻松地将另一个小子句添加到现有子句中,而不必担心忘记处理另一个组合。

例如:-

SimViewBuilder  builder = new SimViewBuilder(jframe, jpanel);

if (model.simRolls != null) {
    builder = builder.actionButton("Next", GroupAlignment.TRAILING);
}

if (inputEvent.getSource == outputBtn) {
    builder = builder.outputLabel(model.simRolls, GroupAlignment.CENTER);
}

if (model.testType.equals("Success")) {
    builder = builder.testLabel("SUCCESS TEST OUTPUT", GroupAlignment.LEADING);
}

... // add more if statements for other features and configure the builder accordingly

// finally, build it
SimView outputScreen = builder.build();
于 2011-02-20T05:49:04.820 回答
1

通常,您安排视图将自己注册为模型的观察者,如本示例中所建议的那样。只有实际使用它的视图才能知道布局。

于 2011-02-20T05:50:22.430 回答