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

Материал из Вики ИТ мехмата ЮФУ
Перейти к: навигация, поиск
(Участники)
(Пример)
Строка 24: Строка 24:
 
=== Пример ===
 
=== Пример ===
 
<source lang="Csharp">
 
<source lang="Csharp">
 +
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()");
 +
    }
 +
}
 
</source>
 
</source>
  

Версия 15:40, 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()");
    }
}

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

Варианты