Адаптер (Adapter) — различия между версиями
Материал из Вики ИТ мехмата ЮФУ
Admin (обсуждение | вклад) (→Участники) |
Admin (обсуждение | вклад) (→Пример) |
||
Строка 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
Другое название
Назначение
Адаптирует интерфейс одного класса к другому. Обеспечивает совместную работу классов с несовместимыми интерфейсами.
Описание
Иногда класс, спроектированный для повторного использования, не удается использовать только потому, что его интерфейс не соответствует интерфейсу, используемому в конкретном приложении. В этом случае создается класс адаптера с интерфейсом, требуемым конкретным приложением, ему передается адаптируемый объект и интерфейс адаптера реализуется вызовом методов адаптируемого объекта.
Реализация
Диаграмма классов
Участники
- 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()");
}
}