Доброго дня.
Не хочу штамповать инстансы гипотетического класса
Depend (например, вычисления при создании инстанса), при этом необходимо, чтобы в нем был доступ к классу
Vendor. При этом, инстанс класса
Vendor должен быть один на систему, но он не должен быть синглтоном.
Vendor используется в нескольких классах, и прежде всего в точке входа - классе
Main.
Наследовать
Depend от
Main избыточно - ведь по смыслу
Depend не является зависимым от содержимого
Main (кроме свойства, хранящего в себе инстанс
Vendor, но наследование не для этого). Придумал такую схему, в которой доступ ко всем так или иначе зависимым классам осуществляется через точку входа (или контейнер с зависимостями, если создать еще один слой),
которая передается зависимым классам, чтобы они (зависимые классы) могли получить уже созданный ранее инстанс.
class Main {
public $Vendor;
private $Depend;
public function __construct() {
$this->Vendor = new Vendor;
$this->Depend = new Depend($this);
}
}
class Depend {
private $Vendor;
public function __construct(Main $Container) {
$this->Vendor = $Container->Vendor;
}
}
class Vendor {
public function __construct() {}
}
Насколько данное решение хорошо? Не является ли такой подход антипаттерном? Есть ли лучшие альтернативы?
Заранее спасибо.