什么是有用的抽象/合同来帮助Builder模式构建MVC UI?

时间:2011-02-20 03:44:07

标签: java model-view-controller abstraction builder contract

我的骰子模拟器根据用户的输入和模型改变其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?

2 个答案:

答案 0 :(得分: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();

答案 1 :(得分:1)

通常,您可以安排视图将自己注册为模型的观察者,如example中所述。只有实际使用它的视图才能知道布局。