Guice指南-簡單工廠模式
在發現依賴注入之前,最常用的是工廠模式。除了服務介面之外,你還有一個既可以向客戶提供服務物件,也可以向測試程式傳遞偽服務物件的工廠類。在這裡我們會將服務實現為一個單件物件,以便讓示例儘量簡化。
public class ServiceFactory {
private ServiceFactory() {}
private static Service instance = new ServiceImpl();
public static Service getInstance() {
return instance;
}
public static void setInstance(Service service) {
instance = service;
}
}
private ServiceFactory() {}
private static Service instance = new ServiceImpl();
public static Service getInstance() {
return instance;
}
public static void setInstance(Service service) {
instance = service;
}
}
客戶程式每次需要服務物件時就直接從工廠獲取。
public class Client {
public void go() {
Service service = ServiceFactory.getInstance();
service.go();
}
}
public void go() {
Service service = ServiceFactory.getInstance();
service.go();
}
}
客戶程式足夠簡單。但客戶程式的單元測試程式碼必須將一個偽服務物件傳入工廠,同時要記得在測試後清理。在我們這個簡單的例子裡,這不算什麼難事兒。但當你增加了越來越多的客戶和服務程式碼後,所有這些虛擬碼和清理程式碼會讓單元測試的開發一團糟。此外,如果你忘記在測試後清理,其他測試可能會得到與預期不符的結果。更糟的是,測試的成功與失敗可能取決於他們被執行的順序。
public void testClient() {
Service previous = ServiceFactory.getInstance();
try {
final MockService mock = new MockService();
ServiceFactory.setInstance(mock);
Client client = new Client();
client.go();
assertTrue(mock.isGone());
}
finally {
ServiceFactory.setInstance(previous);
}
}
Service previous = ServiceFactory.getInstance();
try {
final MockService mock = new MockService();
ServiceFactory.setInstance(mock);
Client client = new Client();
client.go();
assertTrue(mock.isGone());
}
finally {
ServiceFactory.setInstance(previous);
}
}
最後,注意服務工廠的API把我們限制在了單件這一種應用模式上。即便 getInstance() 可以返回多個例項, setInstance() 也會束縛我們的手腳。轉換到非單件模式也意味著轉換到了一套更復雜的API。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/13270562/viewspace-214951/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 簡單工廠模式—>工廠模式模式
- 工廠模式之簡單工廠模式模式
- 簡單工廠和工廠模式模式
- 簡單工廠模式、工廠模式、抽象工廠模式比較模式抽象
- 簡單工廠模式和抽象工廠模式模式抽象
- 工廠模式(簡單工廠模式)快速理解模式
- 簡單工廠模式模式
- 設計模式-簡單工廠、工廠方法模式、抽象工廠模式設計模式抽象
- 建立型:工廠模式-簡單工廠模式
- 簡單工廠和工廠方法模式模式
- 簡單工廠、工廠方法和抽象工廠模式抽象模式
- 一篇搞定工廠模式【簡單工廠、工廠方法模式、抽象工廠模式】模式抽象
- 【Java】簡單工廠模式、工廠模式、介面卡模式Java模式
- 簡單工廠模式--SimpleFactory模式
- C# 設計模式(1)——簡單工廠模式、工廠模式、抽象工廠模式C#設計模式抽象
- 簡單工廠、工廠模式初學習模式
- 設計模式之工廠模式!深入解析簡單工廠模式,工廠方法模式和抽象工廠模式設計模式抽象
- 簡單工廠模式、工廠方法模式和抽象工廠模式有何區別?模式抽象
- 設計模式 - 簡單工廠模式設計模式
- 【設計模式】簡單工廠模式設計模式
- 設計模式——簡單工廠模式設計模式
- 設計模式-簡單工廠模式設計模式
- 工廠三兄弟之簡單工廠模式(三)模式
- 工廠三兄弟之簡單工廠模式(二)模式
- 工廠三兄弟之簡單工廠模式(一)模式
- 設計模式----簡單工廠設計模式
- 秒懂簡單工廠模式模式
- java簡單的工廠模式Java模式
- C++ - 簡單工廠模式C++模式
- aardio 簡單工廠模式模式
- 設計模式之簡單工廠模式設計模式
- java設計模式-簡單工廠模式Java設計模式
- 設計模式(一)—— 簡單工廠模式設計模式
- 簡單工廠模式(設計模式02)設計模式
- Java設計模式(一) 簡單工廠模式不簡單Java設計模式
- Java設計模式之簡單工廠、工廠方法和抽象工廠Java設計模式抽象
- 簡單工廠模式(Simple Factory Pattern)模式
- 設計模式(一):簡單工廠設計模式