динамически поменять алгоритм; • если используется несколько не связанных алгоритмов (напр.: форматирование по ширине и расстановка переносов), возникает картезианский взрыв классов- наследников.
информации друг о друге. • Повышается эффективность программы, ибо связывание делается на этапе компиляции, механизм виртуальных функций не нужен. • Теряется возможность динамического изменения стратегий во время выполнения.
VariableExp *y = new VariableExp("Y");! ! // (true and x) or (y and (not x))! expression = new OrExp(new AndExp(new Constant(true), x),! new AndExp(y, new NotExp(x)));! ctx.assign(x, false);! ctx.assign(y, true);! ! bool result = expression->evaluate(ctx);!
функций и методов, существующих внутри скрипта, к методам в программе на C++. • В нужный момент вызывается скрипт, который оперирует высокоуровневыми функциями.
наследовать). • Сложно добавлять новые классы данных :( • Аккумулирование состояния. • Каждый участник несёт ответственность за обход всех элементов структуры.