我有這樣的代碼(它背後的整個故事是在這裏:https://codereview.stackexchange.com/questions/28990/fancy-pants-vs-cowboy-coding):如何從工廠返回「無」作爲默認情況?
public class BeltPrinterFactory : IBeltPrinterFactory
{
public IBeltPrinter NewBeltPrinter()
{
switch (printerChoice)
{
case BeltPrinterType.ZebraQL220:
return new ZebraQL220Printer();
case BeltPrinterType.ONiel:
return new ONielPrinter();
default:
return new ZebraQL220Printer();
}
}
}
...但增加了一個「無」的枚舉,因爲許多客戶不會有/使用一個:
public enum BeltPrinterType
{
None,
ZebraQL220,
ONiel
// add more as needed
}
編譯器不會讓我沒有默認情況(「不是所有的代碼路徑都返回一個值」)。
「無」選項也許應該是默認情況,但是如果None是printerChoice的當前值,則永遠不應該調用工廠(當「無」時開始滾動滾動的GUI不會顯示,是值),但爲了編譯器的緣故,這應該如何實現?我能以某種方式回報什麼嗎?或將我需要做些什麼「怪異」,如:
. . .
default:
return new None();
. . .
public class None : IBeltPrinter
{
public void PrintLabel(string price, string description, string barcode)
{
;// do nothing
}
}
它不是_weird_,它被稱爲[空對象模式](http://en.wikipedia.org/wiki/Null_Object_pattern),IMO比處理異常或空值要好得多。 –
工廠模式已經(在大多數情況下)已經過時並被IoC和依賴注入替代。 –
@HighCore,它有?我一定錯過了備忘錄。 –