我喜歡這個問題,因爲它問「有沒有更好的方法來做到這一點?
這聽起來像你有一種情況,你有一些價值,讓我們假設一個整數,將用於幾個對象。 「我應該複製這個值,還是應該使用相同的值?」是一個重要的問題。
讓我們假設字符串是多個地方使用的東西,並且不會在應用程序的生命週期中發生變化,但您希望靈活地在一個地方更改字符串的內容。例如,如果您正在構建遊戲,則允許用戶使用的人數可能是整個應用程序中使用的整數。一個好的模式是constant。例如:
public interface ApplicationConstants {
public static Integer PLAYER_LIVES_COUNT = 3;
}
然後需要的常量可以簡單地實現常量接口的任何類:
public class Application implements ApplicationConstants {
public static void main(String[] args) {
FirstClass firstClass = new FirstClass(PLAYER_LIVES_COUNT);
FirstClass superObject = new FirstClass(PLAYER_LIVES_COUNT);
}
}
這比硬編碼數字3在你的應用程序,因爲你有一個地方,一個更好的模式控制這個數字。沒有「查找和替換」。
如果FirstClass對象本身是一個將在應用程序中使用的對象,該怎麼辦?它有多個屬性,其他類需要在應用程序中訪問。在這種情況下,一個好的模式是singleton pattern。
公共final類FirstClassFactory {
private static FirstClass instance = null;
private FirstClassFactroy() {
}
public static synchronized Singleton getInstance() {
if (instance == null) {
instance = new FirstClass();
}
return instance;
}
}
然後在你的應用程序,你可以在運行時更改您的Firstclass實例的值,和值將用於正在使用的任何對象更改的Firstclass:
public class Application {
public static void main(String[] args) {
FirstClass firstClass = FirstClassFactory.getInstance();
firstClass.setPlayerLives(3);
}
}
如果您的應用程序的另一個類調用FirstClassFactory.getInstance()
,就會收到alread實例y將playerLives設置爲3.
最後,假設您有一個用例,需要向FirstClass對象添加更多數據和功能。一個好的模式可能是擴展或wrapper or decorator pattern。例如:
public class LivesManager {
private FirstClass firstClass;
private String statusMessage = "Number of lives remaining: ";
public LivesManager(FirstClass firstClass) {
this.firstClass = firstClass;
}
public void decrementRemainingLives() {
--firstClass.getLives();
}
public String getLivesMessage() {
return statusMessage + firstClass.getLives();
}
}
最後要注意的:如在評論中提到的,這是很好的做法,使類變量私有和使用getter和setter方法來訪問的變量。例如:
public class FirstClass {
private Integer lives;
public FirstClass(Integer lives) {
this.lives = lives;
}
public Integer getLives() {
return lives;
}
public void setLives(Integer lives) {
this.lives = lives;
}
}
希望這會有所幫助,祝你好運!
看到代碼不會有什麼傷害。 –
曾聽說過吸氣劑? – Stultuske