가이 코드를 (: https://codereview.stackexchange.com/questions/28990/fancy-pants-vs-cowboy-coding 뒤에 전체 이야기가 여기에있다) :공장에서 "none"을 기본 케이스로 반환하려면 어떻게해야합니까?
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"옵션이 기본 경우 여야하지만, None이 printerChoice의 현재 값이면 공장을 호출해서는 안됩니다. ("None"일 때 공 굴림을 시작하는 GUI는 표시되지 않습니다. 값입니다), 컴파일러를 위해서 어떻게 구현해야합니까? 어떻게 든 돌려 줄 수 있을까요? null
를 반환하지 않는,
. . .
default:
return new None();
. . .
public class None : IBeltPrinter
{
public void PrintLabel(string price, string description, string barcode)
{
;// do nothing
}
}
그것은 Null Object Pattern (http://en.wikipedia.org/wiki/Null_Object_pattern)이라고 불리우며 IMO는 Exceptions 또는 Null을 처리하는 것보다 훨씬 낫습니다. –
공장 패턴은 (대부분의 경우) 폐기되었으며 IoC 및 Dependency Injection으로 대체되었습니다. –
@HighCore, 그게 뭐죠? 나는 그 메모를 놓쳤을 것입니다. –