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

标签 java exception observer-pattern

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

每次用户单击用户界面上的按钮时,该 Controller 都会将此操作委托(delegate)给包含其中数据的模型。该模型决定数据与某些游戏规则相比是否正确,或者只是抛出异常以在 Controller 中处理此问题并对每个自定义异常使用react。例如。 (在模型类中;不需要向您显示相应的 Controller 类):

具有 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 范式?

最佳答案

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

第二个抛出异常来表示非法参数。使用 IllegalArgumentException 是表示此类问题的最佳方法。但这样做只是为了防止模型进入无效状态,而不是为了实现验证。 Controller 应在将列表传递给模型之前检查列表的有效性。

关于java - 使用观察者模式在模型中抛出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22025943/

相关文章:

c++ - 获取有关结构化异常的详细信息

observer-pattern - EventEmitter,EventTarget和EventDispatcher有什么区别

java - 用EasyMock测试Observer的更新方法

Java 小程序 : Reverse Engineering HTTP Calls

java - 将日历日期设置为当前日期

python - Django 使用 try : and except:

c++ - 选择要覆盖哪个基类的方法

java - Tomcat:缓存控制

java - 如何使用 Apache POI 检查 Excel 单元格是否为空?

除特定单词外的正则表达式