Java MVC,Factory和Observer模式在一起

时间:2016-03-08 13:38:43

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

必须使用mvc,factory和observer模式的应用程序的架构(包,类)应该如何?

问题在于解决一个迷宫,它可以为Labyrinth( model )接口提供两种类型的实现:一种使用二维数组(矩阵)和一种它使用稀疏矩阵(只存储被占用单元格的列表)。

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

界面 LabyrinthObserver 描述了迷宫探索的观察者。 一名观察员将在探索期间在屏幕上打印信息。 一个观察者将探索中找到的解决方案存储在按解决方案长度排序的数据结构中。

最后,应使用 factory 创建迷宫(matrixImpl或sparseImpl)。

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

创建一个接口
-E

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

P.S。:我不是要求这些类的实际实现,只是我应该如何将它们组合在一起的一般概念。

1 个答案:

答案 0 :(得分:1)

由于View类具有迷宫设置器,createTextRepresentation方法不需要迷宫作为参数。

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

因此代码形状应该看起来像

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() { ... }
}