2016-03-08 22 views
1

应该使用mvc,工厂和观察者模式的应用程序的体系结构(包,类)应该如何?Java MVC,工厂和观察者模式在一起

的问题是关于解决一个迷宫,可以有两种类型的implementantions为迷宫(模型)接口:该useses使用一个稀疏矩阵(列表的二维阵列(矩阵)和一个一个只存储占用的单元格)。

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

界面迷宫观察员描述了迷宫探索的观察者。 在勘探期间,一名观察员将在屏幕上打印信息。 一位观察员将按照解决方案的长度排列的数据结构中存储探索发现的解决方案。

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

我设计视图时遇到问题

: 因为我可以在2种方式存储的迷宫(二维矩阵或占用的单元格的列表),我应该如何创建一个迷宫式的文本表示现在知道我有多么的迷宫会存储? 我的想法与方法

createTextRepresentation(? labyrinth) 

但要我迷路参数是什么类型的创建接口?我的所有其他课程都有这个问题:求解者,观察者? 我怎样才能一起使用这3种模式?

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

回答

1

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

你的问题不在于设计View,它是与模型设计。接口需要具有足够的表现力,以便可以在不知道实现细节的情况下使用该接口创建文本表示。

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

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

而对于观察者模式?我有两个观察者:一个是在玩家每次移动后打印迷宫的文本表示,另一个是存储所有解决方案的人。 –