Вот простой пример того, как это можно разделить.
Предположительно, карты игрока представлены в виде «руки» или подобного объекта (то есть набора карт). Это твоя модель. Итак, давайте назовем вашу модель:
package casino.blackjack.model;
class DealtCards
{..}
Вы отображаете свои карты, используя, возможно, JPanel или какую-либо другую конструкцию Swing. Таким образом, вы можете поместить все объекты, которые фактически выполняют рендеринг каждой карты, в отдельный пакет:
package casino.blackjack.view;
class DealtCardsView
{..}
Объект DealtCards существует независимо от того, как он отображается, но его состояние может измениться, если пользователь что-то сделает в графическом интерфейсе. Например, с просьбой «ударить». Предположительно, для этого может быть кнопка. Вид получен из вашей модели.
package casino.blackjack.view;
class DealtCardsView
{
JButton hitMeButton = new JButton("HIT");
DealtCards cards;
public DealtCardsView(DealCards myCards)
{
cards = myCards;
renderCards();
}
private void renderCards(){.. do something..}
}
Теперь, если игрок решает ударить, его объект DealtCards изменяется. Итак, мы хотим реализовать способ обновления вашей модели. Вы можете сделать это с помощью класса контроллера. Класс контроллера реализует интерфейс ActionListener. Когда действие выполняется (то есть пользователь нажимает кнопку «нажать»), контроллер обновляет модель. Таким образом, представление не может напрямую обновить модель. Он просто отправляет уведомление о том, что «действие» произошло. Любые заинтересованные стороны, в данном случае наш контроллер, могут принять соответствующие меры.
package casino.blackjack.controller;
class DealtCardsController implements ActionListener
{
DealtCards cards;
DealtCardsView cardView;
public DealtCardsController(DealtCards myHand, DealtCardsView myView)
{
cards = myHand;
cardView = myView;
cardView.hitMeButton.addActionListener(this);
}
public void actionPerformed(ActionEvent e)
{
cards.changed();
}
}
Итак, вы разбили свое приложение на три слоя. Ваша модель просто содержит текущее состояние (или текущие данные) и любую проверку, которая обходит его. Ваши классы представления отображают модель соответствующим образом. Любое взаимодействие с пользователем в представлении обрабатывается контроллером, в обязанности которого входит обновление модели.
Таким образом, если вы хотите изменить свой вид (например, использовать апплет вместо окна), вашей модели все равно.
Извините за длинный ответ, но надеюсь, что это немного помогает!
РЕДАКТИРОВАТЬ: хорошее объяснение MVC здесь: Java / GWT кодирование пользовательского интерфейса - чистый код