下面是如何可以這樣拆分一個簡單的例子。
據推測,玩家的卡被表示爲「手」或類似的物體(即卡的集合)。這是你的模型。所以,讓我們打電話給你的模型:
package casino.blackjack.model;
class DealtCards
{..}
您可能使用一個JPanel或一些其他Swing結構顯示你的卡。所以,你可以把那個真正做到每張卡的呈現在一個單獨的包中的所有對象:
package casino.blackjack.view;
class DealtCardsView
{..}
的DealtCards對象獨立於它是如何顯示的存在,但如果用戶沒有對某事的狀態可以改變GUI。例如,要求'打'。據推測,可能有一個按鈕來做到這一點。該視圖源自您的模型。
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();
}
}
所以你在三層分割你的應用程序。您的模型只包含當前狀態(或當前數據)以及任何驗證。您的視圖類以適當的方式呈現模型。視圖上的任何用戶交互都由控制器處理,其責任是更新模型。
這樣,如果你想改變你的視圖(比如說使用一個applet而不是一個窗口),你的模型並不在意。
不好意思,囉嗦的回答,但希望有所幫助!
編輯:一個好的MVC解釋一下:java/gwt UI coding - clean code
我沒有理解爲MVC是如何在Java中實現。 :( – 2010-02-23 18:28:55
MVC不需要用你正在編程的語言來實現。唯一的要求是鬆散的概念分離,即模型,視圖和控制器。你不應該擴展模型或視圖或控制器,或者至少,把模型和視圖放在單獨的包中 – 2010-02-23 18:32:54