SoftwareDevelopmentMagazine 에 소개된 ModelViewPresenter 관련 구현 예. http://www.sdmagazine.com/documents/s=7147/sdm0206b/0206b.htm ---- 소스코드를 보면 다음의 클래스들 관계가 MVP 이다. Game - Model. 관계는 Presenter 와만 맺는다. 외부에서 이벤트가 발생했을때는 Presenter 를 통해 통지받는다. BoardPanel - View. 실제 Swing 등 구체적 라이브러리들을 이용, 실제 표현을 한다. BoardPresenter 와 상호참조 관계를 가진다. BoardPresenter - Presenter. Game 과 BoardPanel 사이의 일종의 Mediator. Game 은 ---- 관계를 맺는 코드는 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. 식으로 도메인 모델로부터 올라온다.