2009-08-02 24 views
1

我正在做一個小型的java遊戲,它是1995年遊戲主題醫院的一種克隆。 我最近一直在研究GUI和Level結構,現在我有路徑查找和網格工作。 我目前的「建築材料」方式包括一個房間和一個前臺,到目前爲止工作正常,但我需要實施一種方法來添加不同類型的房間和物品。 這是我在按鈕按下時創建對象(http://snipt.org/lUm)的當前代碼。我應該如何「構建」現在我已經實現了多態性的東西? (Java,模擬遊戲)

我相信一定有更好的方法來做到這一點!我知道我的實現很差,但我最近纔開始理解如何使用抽象類和接口。

其實設置房間或項目的屬性,我目前沒有問題。我正在考慮未來,但我喜歡在堆棧上處理事情的最佳方式。想法應該如何實現這樣的事情?這種事情的任何例子?我會搜索它,但我不確定搜索什麼,因爲我不知道我在做什麼的確切名稱。

對不起,如果我沒有太清楚我到底在說什麼。我會很樂意回答關於此問題的任何進一步問題,或根據需要或要求上傳更多代碼段。

在此先感謝您的時間和想法!

+0

這種東西絕對適合練習面向對象,並規劃你的結構。 思考所有房間都有什麼共同點,並有一個基本的房間類,然後擴展它與不同房間的新功能。 我喜歡主題醫院的方式=) – Clox 2009-08-03 02:02:54

+0

我有一個基本的GridObject類,後面跟着一個Items類和UsableItems類。試圖找出什麼類型的房間,以及如何構造他們 – Relequestual 2009-08-03 09:15:29

+0

現在使用工廠彭定康!似乎像一個魅力工作!謝謝 – Relequestual 2009-08-09 18:18:17

回答

3

退房factory pattern。工廠是一種通過提供參數來創建對象的方法,並且能夠獲得符合通用接口的對象。但是,實施由工廠決定。調用代碼不需要知道這一點。

通過將對象構造封裝在另一個對象(工廠)中,選擇要構建的特定對象的機制從調用代碼中抽象出來。只需修改工廠本身,您就可以在以後輕鬆地提供更多的子類。

因此,在您的示例代碼中,buildMe()方法是工廠的一種形式。它需要一些參數指定需要構建的內容 - RoomReceptionDesk。這兩種方法都會實現相同的界面(一個HospitalComponent?),然後調用代碼將該組件放入醫院。您可以將更多的HospitalComponent子類添加到工廠(一個OperatingTheatre?),並且調用代碼不必更改。

這是值得調查design patterns(在這種情況下,請檢查此列表creational patterns)以瞭解使用對象解決常見問題的不同方式,以及如何與其他人溝通您的解決方案。 Gang-of-Four這本書是這個主題的聖經。

+0

這看起來很有趣。當我能夠保持兩隻眼睛完全打開時,我將不得不閱讀它! :) – Relequestual 2009-08-02 22:09:36

1

多晶現象對於你正在做的事情可能是矯枉過正的。

就我個人而言,我只是有一個房間類,每個建築物的價值表(最大尺寸,每個瓷磚的成本等)表。然後,當您創建一個新房間時,獲取匹配的表格條目,並使用表格中的詳細信息創建您的Room對象。

這可能不是最佳實踐,它可能違背了Java約定(我從動態語言來到Java),但是對於需要更改以創建新房間的代碼行而言,這是我最低的找到。

0

你現在擁有的是一類具有一堆靜態函數的類。它不是很OOP - 這個類只是將一個文件中的所有函數分組的一種方法。

如果你走OOP路線,你需要一個房間基礎類,然後OperatingRoom,ReceptionistDesk,浴室,辦公室(對於工作人員),MRIRoom,WaitingRoom,甚至大廳將是孩子類的房間。

public class Room { 
    protected int width, length; //how many squares wide/long the room is 

    protected int x, y; //where it is on the gride 

    protected float buildingProgress; //how far construction has come 

    protected bool isReady; //is the building ready for use? 

    protected Person occupants[]; //some list/array of people currently in the room 

    protected Person resident; //the person 'in charge' in the room--the receptionist, manager, MRI technician, etc etc. 
} 
0

在使用多態性建模這個問題之前,我會仔細考慮。

問題是:每種類型的房間會展現出根本不同的行爲?它們之間有什麼共同之處?

多態性並不總是答案。組成有時可以讓事情更加靈活。如前所述,數據驅動的解決方案可能是最重要的。

相關問題