Java MVC、工厂和观察者模式结合在一起

标签 java model-view-controller factory observer-pattern

必须使用 mvc、工厂和观察者模式的应用程序的架构(包、类)应该是什么样子?

问题是关于解决一个迷宫,它可以有两种类型的迷宫(模型)接口(interface)实现:一种使用二维数组(矩阵),另一种使用二维数组(矩阵)使用稀疏矩阵(仅存储占用单元格的列表)。

View部分应该负责描述迷宫的文本表示。它应该包含以下方法:get/setLabyrinth、toString。 我还应该有一个 LabyrinthSolver 接口(interface),从中我将创建两个实现:交互式的(使用键盘)和自动的(lee 算法)。

接口(interface)LabyrinthObserver描述了迷宫探索的观察者。 一名观察者将在探索过程中在屏幕上打印信息。 一个观察者会将探索找到的解决方案存储在按解决方案长度排序的数据结构中。

最后,应使用工厂创建迷宫(matrixImpl 或稀疏Impl)。

我在设计 View 时遇到问题: 因为我可以通过两种方式存储迷宫(二维矩阵或占用单元列表),现在知道我的迷宫将如何存储,我应该如何创建迷宫的文本表示? 我正在考虑使用该方法创建一个接口(interface)

createTextRepresentation( ? labyrinth)

但是我的迷宫参数应该是什么类型?我的所有其他类都遇到这个问题:求解器、观察者? 如何一起使用这 3 种模式?

P.S.:我并不是要求这些类的实际实现,只是询问如何将它们组合在一起的一般想法。

最佳答案

由于View类具有labyrinth的setter,因此createTextRepresentation方法不需要labyrinth作为参数。

你的问题不在于设计View,而是在于模型的设计。 Labyrinth 接口(interface)需要具有足够的表现力,以便可以使用该接口(interface)创建文本表示,而无需了解实现细节。

所以代码形状应该看起来像

public class LabyrinthFactory {
    public Labyrinth createLabyrinth() { ... }
}

public class LabyrinthView {
    private Labyrinth model; // Avoid getters and setters. Honor encapsulation.

    public LabyrinthView(Labyrinth model) {
        this.model = model;
    }

    public String createTextRepresentation() { ... }
}

关于Java MVC、工厂和观察者模式结合在一起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35868958/

相关文章:

laravel - 不能在 Laravel 8 中使用旧工厂

java - BufferedWriter write() 不工作

java - 从java中的字符串解析带有正/负前缀的数字

java - MVEL 或 Drools 是否无法解析其类型为 Map<String,List<Object>> 的事实?

java - 函数没有改变值 - JAVA 6 SE

php - Mysql - 在一个查询中为每个 id 选择四行

javascript - C# MVC 在点击时调用 javascript 函数

asp.net-mvc - ASP.NET MVC Controller Action 设计

javascript - 注入(inject)第一个 Angular Factory

scala - Scala 中的伴生对象未将自身与案例类关联