Проблема
Вы работаете над библиотекой оповещений, которую можно подключать к разнообразным программам, чтобы получать уведомления о важных событиях.
Основой библиотеки является класс с методом , который принимает на вход строку-сообщение и высылает её всем администраторам по электронной почте. Сторонняя программа должна создать и настроить этот объект, указав кому отправлять оповещения, а затем использовать его каждый раз, когда что-то случается.
Сторонние программы используют главный класс оповещений.
Каждый тип оповещения живёт в собственном подклассе.
Сначала вы добавили каждый из этих типов оповещений в программу, унаследовав их от базового класса . Теперь пользователь выбирал один из типов оповещений, который и использовался в дальнейшем.
Но затем кто-то резонно спросил, почему нельзя выбрать несколько типов оповещений сразу? Ведь если вдруг в вашем доме начался пожар, вы бы хотели получить оповещения по всем каналам, не так ли?
Вы попытались реализовать все возможные комбинации подклассов оповещений. Но после того как вы добавили первый десяток классов, стало ясно, что такой подход невероятно раздувает код программы.
Комбинаторный взрыв подклассов при совмещении типов оповещений.
Актуальные полимеры
Фото: NMC. Цветные элементы архитектурного декора коллекции Arstyl (NMC)выполнены из полиуретана высокой плотности (300 кг/м³). Вырез в центре розеток облегчает деление на секции для стыковки с профилями, линии и изгибы последних весьма необычны
Во времена экономической нестабильности многие по достоинству оценят декор из полимерных материалов: пенополиуретана, полистирола, дюрополимера, стеклофибробетона, полимербетона и т. д. Эта продукция относится к категории масс-маркет. Она рассчитана на самую многочисленную аудиторию и отличается приемлемым для большинства потребителей уровнем качества, доступной ценой, простотой установки. Причём высокая конкуренция в этом сегменте рынка обуславливает прямую зависимость цены и качества.
Фото: «Европласт». Белоснежные элементы архитектурного декора из пенополиуретана — материала лёгкого и прочного, жёсткого и неги-гроскопичного — весьма живописно смотрятся на цветных стенах
Приобретая украшения для дома, вряд ли стоит останавливаться на самом дешёвом товаре. Как правило, речь идёт об изделиях из полистирола. Молдинги (200 × 60 × 20 мм) из этого материала стоят от 92 руб. Однако они не отличаются изысканным декором, а повышенная хрупкость может свести на нет экономию средств.
Лучше, как и во всём, придерживаться золотой середины, например выбрав архитектурный декор из пенополиуретана. Украшения из него лёгкие, достаточно прочные, влагостойкие (большинство можно устанавливать в ванных комнатах и помещениях бассейнов). Отделочники ценят их за небольшую массу и простоту монтажа, который требует совсем немного времени.
Кстати, изделия из пенополиуретана успешно конкурируют с гипсовой лепниной благодаря невероятно широкому ассортименту, многообразию стилевых решений, а также наличию гибких элементов. На отечественном рынке эту технологичную продукцию представляют компании «Европласт», NMC, Orac Decor. Имейте в виду: свойства полиуретана зависят от плотности и состава компонентов. Так, материал плотностью 250 кг/м³ трудно продавить. Поэтому из него изготавливают плинтусы или иные элементы, которые могут подвергаться механическим воздействиям. Цена молдинга размером 200 × 30 × 32 мм — от 450 руб.
Решение
Наследование — это первое, что приходит в голову многим программистам, когда нужно расширить какое-то существующее поведение. Но механизм наследования имеет несколько досадных проблем.
- Он статичен. Вы не можете изменить поведение существующего объекта. Для этого вам надо создать новый объект, выбрав другой подкласс.
- Он не разрешает наследовать поведение нескольких классов одновременно. Из-за этого вам приходится создавать множество подклассов-комбинаций для получения совмещённого поведения.
Одним из способов обойти эти проблемы является замена наследования агрегацией либо композицией Композиция — это более строгий вариант агрегации, при котором компоненты не могут жить без контейнера.. Это когда один объект содержит ссылку на другой и делегирует ему работу, вместо того чтобы самому наследовать его поведение. Как раз на этом принципе построен паттерн Декоратор.
Наследование против Агрегации.
Декоратор имеет альтернативное название — обёртка. Оно более точно описывает суть паттерна: вы помещаете целевой объект в другой объект-обёртку, который запускает базовое поведение объекта, а затем добавляет к результату что-то своё.
Оба объекта имеют общий интерфейс, поэтому для пользователя нет никакой разницы, с каким объектом работать — чистым или обёрнутым. Вы можете использовать несколько разных обёрток одновременно — результат будет иметь объединённое поведение всех обёрток сразу.
В примере с оповещениями мы оставим в базовом классе простую отправку по электронной почте, а расширенные способы отправки сделаем декораторами.
Расширенные способы оповещения становятся декораторами.
Сторонняя программа, выступающая клиентом, во время первичной настройки будет заворачивать объект оповещений в те обёртки, которые соответствуют желаемому способу оповещения.
Программа может составлять составные объекты из декораторов.
Последняя обёртка в списке и будет тем объектом, с которым клиент будет работать в остальное время. Для остального клиентского кода, по сути, ничего не изменится, ведь все обёртки имеют точно такой же интерфейс, что и базовый класс оповещений.
Обустройство однокомнатной квартиры
Интерьер любой “однушки” должен быть практичным и удобным. В относительно небольшом помещении придется совместить сразу несколько функциональных зон (гостиная, спальня, зона отдыха и др.). Для этого можно использовать перегородки в виде ширм, стеллажей, встроенных модулей. Оригинальный вариант зонирования пространства – размещение подиума со ступеньками. Великолепно смотрится зональная подсветка разной интенсивности. Как правило, квартиру оформляют в светлых тонах, чтобы визуально расширить помещение. На фото интерьеров однокомнатных квартир все чаще представлены так называемые квартиры-студии. Они отличаются отсутствием стен и прочих перегородок, за счет чего обеспечивается просторность помещения. Сразу заметим, что студия подойдет далеко не всем. Например, семьям с детьми в такой квартире будет неудобно.
Список источников
- polinov.ru
- www.ivd.ru
- refactoring.guru