我正在完成一个项目并希望重构某些项目 设计决策。一些基类具有getInstance()静态方法 返回从基类扩展的对象。
假设以下文件夹结构和库类组:
library
Service.php
/Service
CarService.php
BusService.php
/BusService
Long.php
/CarService.php
Long.php
Long.php和Long.php的意图是提供一种实例化的方法 一个长版本的总线或汽车,并通过传递类型在运行时决定它 到getInstance方法。这是当前的代码:
class CarService {
public static function getInstance($type) {
//pseudocode
$className = "CarService"."_".$type;
if class_exists($className)
return new static::className($type);
else
return new CarService($type);
}
//constructor is not public to prevent user code from
//creating a base class object
}
class CarService_Long extends CarService {
...
}
//to get a 'Long' version instance of CarService, user land code calls
$longCarService = CarService::getInstance('Long');
理想情况下,我正在清除所有静态初始化,我看到了这种模式 作为阻挡者。我已经开始使用依赖注入容器来保持 跟踪对象并将它们作为setter和构造函数参数提供。 在这种情况下,我将这种类型的静态实例初始化切换为?
在重构的代码中,我仍然需要决定实例化哪种类型的对象 在运行时?