Паттерн Адаптер (Adapter)

Помечено: , , ,

В этой теме 0 ответов, 1 участник, последнее обновление  Васильев Владимир Сергеевич 7 мес., 2 нед. назад.

  • Автор
    Сообщения
  • #3615

    За примерами адаптеров далеко ходить не нужно — достаточно взглянуть на адаптеры STL-контейнеров. Например, std::stack. Назначение адаптеров — ограничить функциональность существующей сущности, добавить дополнительные проверки, внести какие-то ограничения и так далее, получив тем самым новую концептуальную сущность.

    Я приведу совсем простой пример. Создадим контейнер, который хранит по дням количество часов, отработанных сотрудником за неделю. Логично предположить, что ежедневное количество часов должно быть неотрицательным и не превышать 24. Кроме того, в неделю сотрудник работает неотрицательное число дней, в то же время количество дней не должно превышать 7.

    #include <vector>
    
    template
    <
        template
        <
            class T,
            class allocator = std::allocator<T>
        >
        class container
    >
    class week_sheet
    {
    public:
        bool push_back(int hours)
        {
            if(hours < 0 || hours > 24 || week.size() == 7)
            {
                return false;
            }
    
            week.push_back(hours);
    
            return true;
        }
    
        bool pop_back()
        {
            if(week.empty())
            {
                return false;
            }
    
            week.pop_back();
    
            return true;
        }
    
    private:
        typedef container<int> hour_container;
        hour_container week;
    };
    
    int main()
    {
        week_sheet<std::vector> ws;
    
        ws.push_back(7);
        ws.push_back(4);
        ws.push_back(5);
        ws.push_back(8);
        ws.push_back(6);
    
        return 0;
    }

    Ранее мы рассматривали более практичный пример использования паттерна Адаптер: Работа с сетью в Qt. Сокеты. Паттерн Adapter.

    Итак, адаптер конкретизирует сущность, или адаптирует ее работу под конкретные условия. Адаптер — хороший паттерн. Правильная реализация адаптера позволяет полностью изолировать пользователя от адаптируемой функциональности. Если адаптируемая функциональность изменит свой интерфейс или какие-то другие свойства, то пользователь этого не заметит — достаточно будет просто поправить сам адаптер.

Для ответа в этой теме необходимо авторизоваться.