我的应用程序中有一个 SystemInfoFactory 类,它有一个getSystemInfo()
方法:
/**
* Returns SystemInfo object based on which OS
* server uses
*
* @return SystemInfoInterface SystemInfo object
*/
public function getSystemInfo()
{
$os = $this->getOS();
$systemInfo = null;
switch ($os) {
case "Linux":
$systemInfo = new LinuxInfo();
break;
case "Darwin":
$systemInfo = new OSXInfo();
break;
case "Windows":
$systemInfo = new WindowsInfo();
break;
}
return $systemInfo;
}
因此它根据主机系统选择合适的对象。现在,每个“信息类”都实现SystemInfo
了接口(getArchitecture、getCPU 等方法),但正如您所见,我的代码中没有任何地方检查返回的对象是否真的实现了接口。$systemInfo
在返回之前检查所选对象是否实现它是否被认为是“好习惯” ?这显然不是必需的,但如果有人扩展此应用程序(例如添加 BSD 支持)并忘记实现所有方法,他可能更难以调试。