在模型中使用观察者模式或抛出异常

时间:2014-02-25 20:53:29

标签: java exception observer-pattern

是否更有可能使用Java中的观察者模式来处理一些简单游戏中的游戏规则,或者只是在UserInterface类中向handel抛出异常?

每次用户点击UserInterface上的按钮时,此控制器只会将此操作委托给包含数据的模型。与某些游戏规则相比,模型决定数据是否正确,或者只是抛出异常来在控制器中处理这些数据,并对每个自定义异常做出反应。例如。 (在模型类中;不需要向您显示相应的控制器类):

使用PropertyChangeListener和PropertyChangeSupport的观察者模式:

public void setPlayerNames(ArrayList<String> playerNames) 
{
    if(playerNames.size() == 0)
       propertyChangeSupport.firePropertyChange("pleaseEnterAtLeastOnePlayerName);
    else
       startGame();
}

在模型中有一些自定义异常:

public void setPlayerNames(ArrayList<String> playerNames) throws NoPlayerException
{
    if(playerNames.size() == 0)
       throw new NoPlayerException();
    else
       startGame();
}

哪些方法更符合MVC范例?

1 个答案:

答案 0 :(得分:2)

第一个使用PropertyChangeListener来触发与属性更改无关的事件。使用基于事件的模型来实现验证看起来不太直观或易于使用。

第二个引发异常以表示非法参数。使用IllegalArgumentException是发出此类问题的最佳方式。但它应该只是为了保护模型不进入无效状态,而不是实现验证。在传递给模型之前,控制器应检查列表的有效性。