1. Эти объекты реализуют некий интерфейс MultiLanguage, и извне проверять -- реализуют ли они такой, если да -- вызывать метод defineLang(), а проставлять им, внутри этого метода будет реализация простановки
2. Можно использовать сложный паттерн Visitor, если вам нужно добавить такое поведение
3. Можно юзать трейт -- можно этот способ совместить с 1 способом, если у всех объектов одно поведение
Использовать фреймворк (в смысле на котором вы всегда работаете) и однородный стиль работы с конкретным слоем, чтобы не вникать, а сразу ЗНАТЬ как поправить...
У вас перепутано понимание абстрактного паттерна (один объект следит за изменениями в других) и схожой по смыслу бизнес-логики (покупатель следит за изменением цены)... Если вопрос по паттерну конечно
Афанасий Захаров, ну ок, я привел доводы для того, чтобы человек понимал суть разработки, без знания фреймворков (а к их знаниям цепляются парадигмы и принципы) тяжело и без них держать уровень хорошей разработки
Авито, Яндекс, Ламода, Mail.ru, все сми и издания современные, Рамблер (не почта и поиск, а его медиа-проекты) и миллион других проектов (от сервисов до CRM) -- все фреймы
Сейчас вме более-менее серьезное, что пишется (именно в процессе) -- пишется на фреймах.
Мидл? Сейчас джуном не устроиться без фрейма, благо зп хорошие и не сильно сложно...
То, что вы делаете -- шаблоны, верстка доя мелкой фрилансерской поточки и веб-студий не имеет отношения к большим продуктам, которым нужно меняться и выкатывать фичи по биению пульса пользователя
Зайдите на hh.ru, выберите Москва, наберите js-разработчик и увидите, что 80% вакансий под тройку фреймворков