目前,我在我的應用程序,它使用enum
高效記憶恆定技術在運行時創建常數的內存使用效率,
public enum Board {
Toronto // Toronto stock Exchange
}
public class Stock {
private final Board board;
private final Code code;
....
}
這是一個內存高效的方法下面的設計。因爲,如果證券交易所中有成千上萬的Stock
,則只會創建1個Board
實例。
Stock stock0 = new Stock(Code.newInstance("AAA.TO"), Board.Toronto);
Stock stock1 = new Stock(Code.newInstance("AAB.TO"), Board.Toronto);
但是,這當然有一些缺點。不時,證券交易所將推出新董事會。當這樣的事件發生時,我需要
- 添加新成員枚舉
Board
- 編譯和重新部署應用程序給用戶
public enum Board {
Toronto, // Toronto stock Exchange
TSXV // New Toronto venture
}
Stock stock0 = new Stock(Code.newInstance("AAA.TO"), Board.Toronto);
Stock stock1 = new Stock(Code.newInstance("AAB.TO"), Board.Toronto);
Stock stock2 = new Stock(Code.newInstance("TRU.V"), Board.TSXV);
我想避免這樣的不方便。我的初步計劃是
public class Board {
private final String board;
private Board(String board) {
this.board = board;
}
public Board newInstance(String board) {
return new Board(board);
}
}
但是,這不是一種有效的記憶方式。因爲,將創建Board
的多個實例。
// 2 Toronto board instance will be created! Not memory efficient when we have huge stock list.
Stock stock0 = new Stock(Code.newInstance("AAA.TO"), Board.newInstance("Toronto"));
Stock stock1 = new Stock(Code.newInstance("AAB.TO"), Board.newInstance("Toronto"));
Stock stock2 = new Stock(Code.newInstance("TRU.V"), Board.newInstance("TSXV"));
我想知道,我可以申請什麼樣的數據結構,這樣我可以有一個內存高效的方法來爲常數(在我的情況下,這意味着Board
類)
我不喜歡使用String
,因爲我更喜歡類型安全,以區分Board
和real String
。
使用[flyweight pattern](http://en.wikipedia.org/wiki/Flyweight_pattern)。 – 2015-04-02 03:48:05
@LuiggiMendoza我通過了你的建議,通過使用一個線程安全的方式:我已經通過了你的想法http://stackoverflow.com/a/29405169/72437 – 2015-04-02 04:51:47