소스코드를 보면 다음의 클래스들 관계가 MVP 이다.
Game - Model. 관계는 Presenter 와만 맺는다. 외부에서 이벤트가 발생했을때는 Presenter 를 통해 통지받는다.
관계를 맺는 코드는 Dots.java 에 있다. 즉, initialize() 를 보면 다음의 코드가 나온다.
~cpp
_game = new Game(4, Arrays.asList(new String[] {"JL", "TL", "KML"}));
BoardPanel boardPanel = new BoardPanel();
boardPanel.setGame(_game);
실제로
BoardPanel.setGame 을 보면
~cpp
public void setGame(Game game) {
_presenter = new BoardPresenter(game, this);
_pixelSize = getIdealSize();
setSize(_pixelSize);
}
이며
BoardPresenter 를 보면
~cpp
public BoardPresenter(Game game, BoardPresenterDrawListener listener) {
_game = game;
_game.addListener(this);
_listener = listener;
}
이다. (
BoardPresenter 에서 listener 는
BoardPanel)
그리고
BoardPanel 에서 이벤트 발생시에는
BoardPanel.mouseReleased ->
BoardPresenter.processClick -> Game.join 식으로 호출되며
Game 객체의 데이터가 바뀌는 경우에는 (ex : boxClosed)
Game.boxClosed -> listener.boxClosed (여기서 listener 는 Presenter. Presenter 들은 여러개가 될 수 있다. Game 객체에 addListener 로 등록된 만큼) ->
BoardPanel.drawInitials. 식으로 도메인 모델로부터 올라온다.