通過配置文件初始化單例是否合適?通過配置文件初始化一個「singleton」是否合適?
我注意到singleton的構造函數不應該有任何參數,原因是如果你需要使用參數來配置你的對象,可能不應該是singleton。看起來這句話非常有名,但確實有一些特殊的誹謗案例:
例如 我們設計了一個簡單的分佈式系統,以處理大量用戶查詢:
- 只有一箇中央服務器
- n個子服務器,每個子服務器連接到中央服務器
- 有子之間沒有任何連接服務器
顯然,我們可以設計的「中央服務器」爲單身,詳情如下:
- enum ServerType;
- 抽象類服務器;
- class CentralServer從Server繼承;(CentralServer是單例)
- class SubServer繼承自Server;
- class Query;
- ... ... ...
但中央服務器需要一些配置,如:
- 服務器名
- 描述
- 端口編號,ip地址地圖
- 其子服務器列表
- BlockingQueue的大小
- ... ... ...
如何通過這些屬性初始化中央服務器?
我目前的解決方案:
- 使用配置文件來完成這部分工作。
- 我定義了另一個類
Configuration
。
所以中央服務器當前的構造是這樣的:
class CentralServer extends Server implements Runnable, ....... {
....
....
private static CentralServer _instance;
private CentralServer() {
super();
....
serverName = Configuration.getCentralServerName();
description = Configuration.getCentralServerDescription();
Configuration.initCentralServerPortNumIpMap(portNumIpMap);
Configuration.initCentralServerSubServersList(subServersList);
sizeBlockingQueue = Configuration.initCentralServerBlockingQueueSize();
....
}
public CentralServer getInstance() {
if (_instance == null) {
_instance = new CentralServer();
}
return _instance;
}
....
....
}
Configuration類,將閱讀和分析的配置文件,走出配置信息的。
我的問題:
初始化單這樣的合適與否,如果沒有,請 給出了更合適的方法
我還需要配置所有的子服務器,所以似乎配置 類太重了,我應該把大配置類拆分成 兩個子類嗎? class CentralConfiguration和類 SubConfiguration?