2016-03-08 2 views
1

Как должна выглядеть архитектура (пакеты, классы) приложения, которые должны использовать шаблоны mvc, factory и observer?Java MVC, шаблоны Factory и Observer вместе

Проблемы о решении лабиринта, который может иметь два типа implementantions для Лабиринта (модели) интерфейс: один, который useses в двумерный массив (матрица), и тот, который использует разреженную матрицу (список, хранит только занятые ячейки).

View часть должна нести ответственность за описание текстового представления лабиринта. Он должен содержать методы: get/setLabyrinth, toString. У меня также должен быть интерфейс LabyrinthSolver, из которого я создам две реализации: интерактивную (с использованием клавиатуры) и автоматическую (алгоритм lee).

Интерфейс LabyrinthObserver описывает наблюдателя исследования лабиринта. Один наблюдатель будет печатать на экране информацию во время исследования. Один наблюдатель сохранит найденные поиском решения в структуре данных, отсортированной по длине решения.

Наконец, лабиринты (matrixImpl или sparseImpl) должны быть созданы с использованием фабрики .

У меня возникли проблемы при проектировании вида: Поскольку я могу хранить лабиринт двумя способами (двумерная матрица или как список занятых ячеек), как мне создать текстовое представление лабиринта, зная, как мой лабиринт будет храниться? Я имею в виду создание интерфейса с помощью метода

createTextRepresentation(? labyrinth) 

Но какой тип должен быть мой параметр лабиринте? У меня есть эта проблема со всеми моими другими классами: решатель, наблюдатель? Как я могу использовать эти 3 шаблона вместе?

P.S .: Я не прошу о реальных реализациях этих классов, просто общая идея, как объединить их.

ответ

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

А для шаблона наблюдателя? У меня есть два наблюдателя: один, который печатает текстовое представление лабиринта после каждого хода игрока и тот, который будет хранить все решения. –

Смежные вопросы