基于类可用性实例化的对象的运行时解析

时间:2014-03-05 01:17:58

标签: php inheritance static dependency-injection

我正在完成一个项目并希望重构某些项目 设计决策。一些基类具有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和构造函数参数提供。 在这种情况下,我将这种类型的静态实例初始化切换为?

在重构的代码中,我仍然需要决定实例化哪种类型的对象 在运行时?

0 个答案:

没有答案