Какой шаблон проектирования я могу использовать для эмуляции трейтов / миксинов в PHP ?

Поскольку черты характера недоступны в PHP 5.3 AFAIK, мне нужно эмулировать некоторые из предлагаемых ими функций. Интерфейсы не будут работать, потому что мне нужна конкретная функциональность.

Проблема:

У меня есть два клиентских класса, которые должны совместно использовать некоторые функции, но выходить из разных базовых классов.

ClassA extends Foo {}

ClassB extends Bar {}

Мне нужно иметь возможность реализовать функцию getComponent () в обоих классах, и она должна быть функциональность идентична.

Изменение базового класса невозможно. Я думал сделать что-то вроде этого:

Class ComponentHandler {
  function getInstance() {
    //return singleton
  }

  function getComponent() {
   //required functionality
  }
}

Class A extends Foo {

  var $handler;

  function __construct() {
    $this->handler = ComponentHandler::getInstance();
  }
}

Я бы реализовал этот конструктор как в ClassA, так и в ClassB. В моем клиенте я бы сделал такие звонки:

$class = new ClassA();
$class->handler->getComponent();

$class = new ClassB();
$class->handler->getComponent();
13
задан user2513149 13 July 2013 в 20:40
поделиться