是否更有可能使用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范例?
答案 0 :(得分:2)
第一个使用PropertyChangeListener来触发与属性更改无关的事件。使用基于事件的模型来实现验证看起来不太直观或易于使用。
第二个引发异常以表示非法参数。使用IllegalArgumentException是发出此类问题的最佳方式。但它应该只是为了保护模型不进入无效状态,而不是实现验证。在将传递给模型之前,控制器应检查列表的有效性。