Я разбор строки типа:Design Pattern для выполнения запросов на различные «выходных уровнях»
\read(customer) hello world
~> \method(arg, arg, ...)
в структурукомпозита данных, который сохраняется в к п аргументов, которые объекты requestLeaf, аргументы которых могут быть объектом requestLeaf (если это просто текст, который должен быть возвращен, как указано выше («hello world»)) или другой requestComposite object (если выполняется некоторое вычисление (например, read-> client), пока он снова не станет простым.
requestComposite Object
(
[requests:protected] => Array
(
[0] => commandRequest Object
(
[methodName:protected] => read
[arguments:protected] => Array
(
[0] => commandRequest Object
(
[methodName:protected] => text
[arguments:protected] => customer
)
)
)
[1] => commandRequest Object
(
[methodName:protected] => text
[arguments:protected] => hello world
)
)
)
То, что я хочу достичь, состоит в том, чтобы прокрутить весь композит так, чтобы он выдавал какой-то документ.
аргументы или Лифс из самого первого композитный представляют в корень или уровень 0 для печати на документе.
Я хочу использовать библиотеку для этого. Эта библиотека может обрабатывать текст, изображения и т. Д., Но ничего не может оценить!
Все > Уровень 0 должен быть вычислен в другой библиотека.
Эта библиотека может считывать значения членов, выполнять некоторую математику и т. Д. И возвращать свое окончательное значение (исключительно строки) в корень для распечатки.
Все остальное напечатано явным путем, например. \ IMG() или \ текст()
Там может быть
\read(x)
маркер для поиска на значение члена X,
whichs значение должно быть напечатано неявное, (без упаковки его в другой \ текст (!))
может быть \ список() маркер цикла его аргументы с помощью указанного списка членов, как:
\list(\read(x)))
X может быть другой Y
\list(\read(\read(y))).
Другими словами: Я не может знать, насколько глубока структура.
Случается, что я довольно новичок в разработке шаблонов и, в частности, ОО.
Я возиться с цепи ответственности шаблоном для «выполнения» прямо сейчас, где рендеринга/вывод библиотеки и библиотека вычисления строят цепочку обработчиков.
Но мне немного интересно, если CoR действительно заполняет мои потребности:
Как бы вы решили проблему вроде этого?
EDIT: МОЯ ПОДХОД КАК ПОКА
перебирать композитов.
проходя вдоль Mediator Object
, который содержит выходную библиотеку и библиотеку вычисления.если текущий лист является текст
проверить, если ток является корнем
если НЕТ визит библиотека вычисления для оценки фактического значения и передать его кому это может касаться (например, \ чтения(), \ varput(), ...)
если ДА визит выход библиотека распечатать его
что приходит на ум, что я должен реализовать каждый requestMethod в обеих библиотеках, чтобы добиться автоматической корневой печати. то есть
\ read() в вывод должен печатать текст в документе,
\ read() в библиотеке вычислений следует искать значение члена.
Я чем-то смущаю здесь?
что вы пытаетесь сделать это не может быть сделано с просто старым https://en.wikipedia.org/wiki/Composite_pattern? возможно, вам просто нужно немного пробежать по дереву? –
1. Мой вопрос мог быть недостаточно явным. Я обновил описание проблемы. 2. Что для меня настолько непонятно и непонятно: Как определить правый обработчик для разных уровней структуры (если root ~> print to pdf, если не ~> вернуть вычисленное значение в root, так что это может быть – lance
Это то, для чего предназначена рекурсия. Метод принимает вход, работает над тем, какой бит следующий, оценивает, был ли он последним бит или нет. Если ДА, возвращает некоторое значение, если НЕТ, удаляет обработанный бит с входа , и передает лишенный вход себе. – dbugger