Адаптер (Adapter) — различия между версиями

Материал из Вики ИТ мехмата ЮФУ
Перейти к: навигация, поиск
(Использование)
(Достоинства и недостатки)
Строка 70: Строка 70:
  
 
=== Достоинства и недостатки ===
 
=== Достоинства и недостатки ===
*  
+
* Повышает степень повторного использования кода.
 +
* Адаптер должен обеспечить, чтобы выполнялись все требования для вызовов методов адаптируемого объекта - например, инициализация некоторых параметров. Это усложняет реализацию.
 +
* Иногда трудно транслировать параметры адаптера в параметры адаптируемого объекта.
  
 
=== Варианты ===
 
=== Варианты ===
 
*
 
*

Версия 20:33, 2 августа 2014

К основной странице курса

Другое название

Назначение

Адаптирует интерфейс одного класса к другому. Обеспечивает совместную работу классов с несовместимыми интерфейсами.

Описание

Иногда класс, спроектированный для повторного использования, не удается использовать только потому, что его интерфейс не соответствует интерфейсу, используемому в конкретном приложении. В этом случае создается класс адаптера с интерфейсом, требуемым конкретным приложением, ему передается адаптируемый объект и интерфейс адаптера реализуется вызовом методов адаптируемого объекта.

Использование

Паттерн Адаптер используется когда:

  • Требуется использовать существующий класс, но его интерфейс не соответствует нашим потребностям.
  • Требуется создать повторно используемый класс, взаимодействующий с заранее неизвестными классами, имеющими несовместимые интерфейсы

Реализация

Диаграмма классов

AdapterCommon.png

Участники

  • Target - целевой объект

Определяет зависящий от предметной области интерфейс, которым пользуется Client

  • Client - клиент

Работает с объектами, удовлетворяющими интерфейсу Target

  • Adaptee - адаптируемый класс

Определяет существующий интерфейс, который нуждается в адаптации

  • Adapter - адаптер

Адаптирует интерфейс Adaptee к интерфейсу Target

Пример

class Client
{
    static void ClientMethod(Target t)
    {
        t.Request();
    }
    static void Main()
    {
        Adaptee a = new Adaptee();
        ClientMethod(new Adapter(a)); // Адаптер позволяет передавать объект типа Adaptee в ClientMethod
    }
}

interface Target
{
    void Request();
}

class Adapter : Target
{
    private Adaptee adaptee;

    public Adapter(Adaptee adaptee)
    {
        this.adaptee = adaptee;
    }
    public void Request()
    {
        adaptee.SpecificRequest();
    }
}

class Adaptee
{
    public void SpecificRequest()
    {
        Console.WriteLine("SpecificRequest()");
    }
}

Достоинства и недостатки

  • Повышает степень повторного использования кода.
  • Адаптер должен обеспечить, чтобы выполнялись все требования для вызовов методов адаптируемого объекта - например, инициализация некоторых параметров. Это усложняет реализацию.
  • Иногда трудно транслировать параметры адаптера в параметры адаптируемого объекта.

Варианты