Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用MVC设计模式观察嵌套对象_Java_Model View Controller_Design Patterns - Fatal编程技术网

Java 如何使用MVC设计模式观察嵌套对象

Java 如何使用MVC设计模式观察嵌套对象,java,model-view-controller,design-patterns,Java,Model View Controller,Design Patterns,我试图使用MVC设计模式来观察模型类中的对象。例如,模型类表示具有x个楼层且每个楼层都有门的建筑,您将如何观察位于楼层对象内部的门。视图对象如何到达门对象以将自己注册为观察者?也许您想要的是观察者模式: 该模式有一个观察者对象,用于侦听事件并在事件发生时通知所有侦听器。您可以将建筑设置为观察者,并检查门中的修改,当某些内容发生更改时,您可以通知所有侦听器。现在,您的建筑是一个观察者,视图可以注册为侦听器。 下面是一个简单的代码示例: 以下是充当观察者的建筑类: class Building {

我试图使用MVC设计模式来观察模型类中的对象。例如,模型类表示具有x个楼层且每个楼层都有门的建筑,您将如何观察位于楼层对象内部的门。视图对象如何到达门对象以将自己注册为观察者?

也许您想要的是观察者模式:

该模式有一个观察者对象,用于侦听事件并在事件发生时通知所有侦听器。您可以将建筑设置为观察者,并检查门中的修改,当某些内容发生更改时,您可以通知所有侦听器。现在,您的建筑是一个观察者,视图可以注册为侦听器。 下面是一个简单的代码示例:

以下是充当观察者的建筑类:

class Building {

    List<Observers> listeners = new ArrayList<>();

    public void checkDoors(){
        //check for variations...
        if(variation) notifyListeners(); //iterate over all observers and notify them
    }


    public void addListener(Listener listener){
        listeners.add(listener);
    }
}

感谢您的回复,所以建筑(模型)将在每层的每个门上使用观察者模式?这仍然是有效的MVC模式吗?您可以混合设计模式来增加功能。您的控制器将作为观察者,观察门上的事件,以通知听众。仍然是有效的MVC模式,因为您使用视图进行渲染,使用控制器处理业务逻辑,使用模型处理数据管理和持久性。
class View implements Listener {

    public View(Building building){

        building.addListener(this);
    }

    void handleDoor(Door door){
        //do some stuff...
    }
}