Дык нет у меня сомнений, что все этоможнореализовать.
У меня есть соображение (возможно и ошибочные!!!), что эффективно это можно реализовать только врезавшись в Язык, но не конструируя сие из уже заданного...

Давайте попробуем написать нечто абсолютно конкретно, чтобы про получившуюся эффективность можно было так же конкретно говорить. Показывая на нее пальцем.

Ну про то, что "у нее у нутре неонка", мы все помним
Но, давайте вспомним: ведь там же есть еще и Думатель (который будет думать), и Решатель (который будет решать)
Ну, поскольку у нас таки ООП, то пускай Думатель и Решатель будут именами типов, и в нашей схеме будут например два экземпляра Думателей, и два Решателей.
У Думателя есть методы, к примеру: БыстроПодумать, ХорошоПодумать...
А у Решателя - ПростоРешить, РешитьСОтветом, РешитьПодумавши
Ну и конечно пускай будет несколько объектов типа Тумблер. И наша задача, так соединить эти объекты, чтобы по сигналам от соответствующих Тумблеров - Думатели начали думать, а Решатели, соответственно - решать

И вот примерно так я бы это делал на Дельфи (в смысле, имея в виду, что мои объекты имеют поля Event типаprocedure of object, ну и используют их, естественно)
## Код:
```
// Запускаем фабрики, для установки элементов на плату
  Тумблер1  := NewТумблер('Подумать');
  Тумблер2  := NewТумблер('Решить');
  Тумблер3  := NewТумблер('Хорошо решить');
  Тумблер4  := NewТумблер('Хорошо подумать');
  Тумблер5  := NewТумблер('Подумать над решением');
  Решатель1 := NewРешатель();
  Решатель2 := NewРешатель();
  Думатель1 := NewДуматель();
  Думатель2 := NewДуматель();

// Соединяем элементы между собой
  Тумблер1.Event := Думатель1.БыстроПодумать; // это Провод1
  Тумблер2.Event := Решатель1.ПростоРешить;   // это Провод2
  Тумблер3.Event := Решатель2.РешитьПодумавши;// это Провод3
  Решатель2.Event:= Думатель2.ХорошоПодумать; // это Провод4
  Тумблер4.Event := Думатель1.ХорошоПодумать; // это Провод5
  Тумблер5.Event := Думатель2.БыстроПодумать; // это Провод6
  Думатель2.Event:= Решатель1.ПростоРешить;   // это Провод7
```

А как это сделать на языках, не имеющего такого славного типа, спрашивается
Мое сегодняшнее понимание таково, поля Event теперь должны иметь тип указателя на абстрактный класс Command.
А я, лично, в этом же модуле, должен определить 7 (семь!!!) расширений этого класса, и, соответственно нарисовать 7 процедур примерно в таком стиле:
## Код:
```
TYPE Command3 = EXTENSIBLE RECORD(Command)END;
PROCEDURE (VAR self:Command3)Execute();
BEGIN
  Решатель2.РешитьПодумавши();
END Execute;
```

И дополнить секцию созидания 7 (семь!!!) раз в таком стиле:Провод3 := New(Command3);

Может я чего не понимаю....
Откройте мне глаза, пожалуйста, чтобы можно было адекватно провести сравнение эффективности двух механизмов.
Ибо на уровне моего сегодняшнего понимания, сравнивать сие как по эффективности, так и по пользовательскому интерфейсу - как-то и неловко даже...