工厂方法返回null是否可以?

Jef*_*att 26 c# oop design-patterns factory-method

我想知道这里的最佳做法.如果工厂方法无法创建任何内容,那么返回null是一种好习惯吗?这是一个例子:

ICommand command = CommandFactory.CreateCommand(args);
if (command != null)
    command.Execute();
else
    // do something else if there is no command
Run Code Online (Sandbox Code Playgroud)

NullCommand我想,另一种方法是返回一个或某个东西,但最佳做法是什么?

Jon*_*eet 31

我认为工厂方法在某些情况下返回null是合理的,但如果它是一个被调用的方法则不行CreateCommand.如果它是GetCommand或者FetchCommand,那可能没问题...但是一个Create方法应该在失败时抛出异常,我建议.

当然,你是否真的希望它null在这种情况下回归取决于更大的图景.(例如,您是否可以返回合理的空对象实现?)

  • @TimSchmelter:为什么不呢?在某些情况下,我绝对会期望构造函数出现异常 - "FileStream"是一个经典的例子......或者任何参数在任何形式下都可能无效的东西,例如对期望非空引用的东西给出空引用. (6认同)
  • @TimSchmelter:即使在Java中,你也不会将它用于明显无效的参数之类的东西.基本上我不认为构造函数抛出异常与抛出异常的方法特别不同,除非你需要更加小心,如果你已经分配了任何非托管资源(因为调用者将无法处理新构造的对象). (6认同)