2016-04-27 80 views
0

我想構建一個只能由GameController修改的類,但可以被任何類訪問。我應該研究什麼樣的設計模式來完成這個?我在想什麼OOD設計模式?

*我在Java中構建它,而GameController是我的Main類。所以,我無法在GameController類中創建一個私有實例。希望是那麼簡單。

+1

只是讓吸氣劑,沒有設置器,即只讀。這是** Encapsulation **,不是模式。 –

+1

我能想到的顯而易見的解決方案是讓界面或抽象類定義要訪問的行爲,然後在您的'GameController'中實現一個私有類來實現該接口。 – Dolda2000

+0

@ChrisWohlert,獲取者不確保屬性不可修改。根據財產的類型,您可能還需要製作防禦性副本。 –

回答

2

沒有「設計模式」。相反,只需使用Java的訪問修飾符,即提供public獲取者,但只提供包專用的設置者或其他增變器方法(假定GameController使用的類位於相同包中)。

0

您可以創建一個界面層次結構,其中頂層是隻讀的,下一個層次添加了設置者。 該類實現讀寫接口。 控制器獲取帶有可寫接口的實例,其他所有分類只讀接口。

0

但可以訪問任何類? 我想你在這裏試圖實現的是每個類訪問和共享Controller類的相同實例。你可以去用MVC模式,但如果你是那爲時已晚,需要以某種方式共享相同的情況下,你可以使用單個圖案

public class getGame{ 

private static GameController gameController; 

public static GameController getController(){ 

if(gameController==null){ 
gameController = new GameController(); 
} 

return gameController; 
} 

} 

你不需要擔心上面類創建實例,因爲每場去標記爲靜態。