Рассмотрим теперь, каким образом этот проект позволяет создать интерфейс, способный выполнять последующие доработки. Можно начать с одного модуля локализации, а носители других языков могут добавить новые модули. Это применимо не только к процедуре локализации, но может пригодиться для решения любых проблем, предполагающих наличие нескольких алгоритмов для заданной проблемы.
Необходимо иметь в виду, что проект Strategy предназначен не просто для аль­тернативных данных, но и для альтернативных функциональных возможностей. Другими словами, если единственная разница между стратегиями может выражаться в значениях, для решения определенной проблемы проект может быть неприменим. На практике пример, приведенный ранее, будет содержать значительно больше функциональных различий между языками, и перечень этих различий может занять столько же страниц, сколько и эта глава.
Типовой проект Strategy можно найти в PEAR_Error - в классе обработки ошибок, включенном в PEAR. Стерлинг Хьюджес (Sterling Hughes) написал систему обработки ошибок в PEAR, что позволит использовать приемлемое число стандартов поведения по умолчанию, позволяя тем самым в зависимости от контекста применения перейти на альтернативное применение.

Листинг 29.6. Использование класса localization

<?php
print("Введите по-английски");
include_once('2 9-5.php');
$local = new English;
print($local->formatMoney(12345678) . "n");
print($local->translate('yes') . "n");
print(" Введите по-немецки^^^");
include_once('2 9-6.php');
$local = new German;
print($local->formatMoney(12345678) . "n");
print($local->translate('yes') . "n");
?>