@Amir1807

Как сделать код в стиле MVC?

У меня есть учебное задание. Возникает вопрос как все это сделать в архитектурном стиле MVC? Ниже я еще указал не реализованные классы и интерфейс. Не могу понять что и как определенные классы реализовывать, что и откуда вызывать и так далее. Описание такое:

Рыцарь. Определить иерархию амуниции рыцаря. Операции с рыцарем:

Вывести характеристики рыцаря
Вывести список амуниции рыцаря
Экипировать рыцаря, что должно отразиться на его характеристиках (например вес, сила атаки и т.д.)
Провести сортировку амуниции на основе одного из параметров
Найти элементы амуниции, соответствующие заданному диапазону параметров.

Пример ввода/вывода
Main menu:
1. Print knight stats
2. Show ammunition
3. Equip ammunition
4. Sort ammunition
5. Search ammunition
6. Exit
Choose option:
2
Sword{damage=10, weight=20, cost=30}
Helmet{protection=30, weight=10, cost=20}
Main menu:
1. Print knight stats
2. Show ammunition
3. Equip ammunition
4. Sort ammunition
5. Search ammunition
6. Exit
Choose option:
3
What kind of ammunition do you want to equip?
1. Sword
2. Helmet
Choose option:
1
Input sword weight:
100
Input sword cost:
2
Input sword damage:
30
Main menu:
1. Print knight stats
2. Show ammunition
3. Equip ammunition
4. Sort ammunition
5. Search ammunition
6. Exit
Choose option:
2
Sword{damage=10, weight=20, cost=30}
Helmet{protection=30, weight=10, cost=20}
Sword{damage=30, weight=100, cost=2}
Main menu:
1. Print knight stats
2. Show ammunition
3. Equip ammunition
4. Sort ammunition
5. Search ammunition
6. Exit
Choose option:
1
Ammunition cost: 52
Ammunition weight: 130
Ammunition damage: 40
Ammunition protection: 30
Main menu:
1. Print knight stats
2. Show ammunition
3. Equip ammunition
4. Sort ammunition
5. Search ammunition
6. Exit
Choose option:
4
Choose sort type:
1. Cost
2. Weight
Choose option:
2
Helmet{protection=30, weight=10, cost=20}
Sword{damage=10, weight=20, cost=30}
Sword{damage=30, weight=100, cost=2}
Main menu:
1. Print knight stats
2. Show ammunition
3. Equip ammunition
4. Sort ammunition
5. Search ammunition
6. Exit
Choose option:
5
Choose search field:
1. Cost
2. Weight
Choose option:
1
Input minimum cost: 
0
Input maximum cost: 
5
Sword{damage=30, weight=100, cost=2}
Main menu:
1. Print knight stats
2. Show ammunition
3. Equip ammunition
4. Sort ammunition
5. Search ammunition
6. Exit
Choose option:
6
Bye!


public class KnightApplication {

    public static void main(String[] args) {
        KnightApplication application = new KnightApplication();
        application.start();
    }

    private void start() {
        throw new UnsupportedOperationException("You need to implement this method");
    }

}


public class Knight {

    private Ammunition[] ammunition;

    public Ammunition[] getAmmunition() {
        throw new UnsupportedOperationException("You need to implement this method");
    }

    /**
     * Add new ammunition element to knight
     * @param element that should be equipped to the knight
     */
    public void equip(Ammunition element) {
        throw new UnsupportedOperationException("You need to implement this method");
    }

    public int calculateAmmunitionWeight() {
        throw new UnsupportedOperationException("You need to implement this method");
    }

    public int calculateAmmunitionCost() {
        throw new UnsupportedOperationException("You need to implement this method");
    }

    public int calculateAmmunitionDamage() {
        throw new UnsupportedOperationException("You need to implement this method");
    }

    public int calculateAmmunitionProtection() {
        throw new UnsupportedOperationException("You need to implement this method");
    }

}


public class KnightGenerator {

    /**
     * Use it to quickly generate knight
     * @return knight
     */
    public static Knight generateKnight() {
        throw new UnsupportedOperationException("You need to implement this method");
    }


public interface Ammunition {

    int getWeight();

    int getCost();

}


public class ConsoleView {
    
}
  • Вопрос задан
  • 151 просмотр
Пригласить эксперта
Ответы на вопрос 1
azerphoenix
@azerphoenix Куратор тега Java
Java Software Engineer
Добрый день.
public class Knight {
    private Ammunition[] ammunition;

Наверное, вместо массива есть смысл использовать что-нибудь из jcf. Например, List.

Что такое MVC - model, view, controller

Controller
Создайте несколько контроллеров. Например. MenuController, внутри которого будут методы выводящие меню и другие методы для работы с меню

throw new UnsupportedOperationException("You need to implement this method");

Если вы хотите, чтобы пользователь имплементировал данный метод, то вместо выбрасывания исключения можно использовать абстрактный класс, а тело метода оставить пустым. Ну или же использовать интерфейс.

Model
В данном случае у вас есть необходимые модели (сущности). Например, Knight, Ammunition

View
Ну тут уже можно например, для красоты подключить либу AsciiTable и выводить элементы меню в виде красивой таблицы или например, добавить прогресс бар в консольное приложение и т.д.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы