![Адаптер](/images/patterns/cards/adapter-mini.png?id=b2ee4f681fb589be5a0685b94692aebb)
Адаптер на C#
Адаптер — це структурний патерн, який дозволяє подружити несумісні об’єкти.
Адаптер виступає прошарком між двома об’єктами, перетворюючи виклики одного у виклики, що зрозумілі іншому.
Складність:
Популярність:
Застосування: Патерн можна часто зустріти в C#-коді, особливо там, де потрібна конвертація різних типів даних або спільна робота класів з різними інтерфейсами.
Ознаки застосування патерна: Адаптер отримує конвертований об’єкт у конструкторі або через параметри своїх методів. Методи Адаптера, зазвичай, сумісні з інтерфейсом одного об’єкта. Вони делегують виклики вкладеному об’єктові, перетворивши перед цим параметри виклику у формат, підтримуваний вкладеним об’єктом.
Концептуальний приклад
Цей приклад показує структуру патерна Адаптер, а саме — з яких класів він складається, які ролі ці класи виконують і як вони взаємодіють один з одним.
Program.cs: Приклад структури патерна
using System;
namespace RefactoringGuru.DesignPatterns.Adapter.Conceptual
{
// The Target defines the domain-specific interface used by the client code.
public interface ITarget
{
string GetRequest();
}
// The Adaptee contains some useful behavior, but its interface is
// incompatible with the existing client code. The Adaptee needs some
// adaptation before the client code can use it.
class Adaptee
{
public string GetSpecificRequest()
{
return "Specific request.";
}
}
// The Adapter makes the Adaptee's interface compatible with the Target's
// interface.
class Adapter : ITarget
{
private readonly Adaptee _adaptee;
public Adapter(Adaptee adaptee)
{
this._adaptee = adaptee;
}
public string GetRequest()
{
return $"This is '{this._adaptee.GetSpecificRequest()}'";
}
}
class Program
{
static void Main(string[] args)
{
Adaptee adaptee = new Adaptee();
ITarget target = new Adapter(adaptee);
Console.WriteLine("Adaptee interface is incompatible with the client.");
Console.WriteLine("But with adapter client can call it's method.");
Console.WriteLine(target.GetRequest());
}
}
}
Output.txt: Результат виконання
Adaptee interface is incompatible with the client.
But with adapter client can call it's method.
This is 'Specific request.'