我目前有一个具有紧密耦合依赖关系的类,并且类构造函数当前没有任何参数.我试图能够选择性地传递不同的依赖项而不更改构造函数签名,从而破坏当前使用该类的应用程序.
我想出了这个模式:
class Car {
private $engine;
public function __construct($options = array()) {
if (isset($options['engine']) {
$this->engine = $options['engine'];
} else {
$this->engine = new Engine();
}
}
}
Run Code Online (Sandbox Code Playgroud)
这样,汽车仍然可以与创建(使用默认的引擎)new car(),或通过传递一个自定义的引擎:new Car(array('engine' => new CustomEngine())).
这是一个正确的方法吗?这与可维护性有什么问题?