WYPRZEDAŻ ZIMOWA TRWA!
Adapter

Adapter w języku C#

Adapter to strukturalny wzorzec projektowy pozwalający na współpracę niekompatybilnych obiektów ze sobą.

Adapter pełni rolę opakowania dwóch obiektów. Przechwytuje wywołania jednego z obiektów i przekształca je na format i interfejs zrozumiały dla drugiego obiektu.

Złożoność:

Popularność:

Przykłady użycia: Wzorzec Adapter jest dość powszechny w kodzie C#. Często stosuje się go w systemach bazujących na przestarzałym kodzie, gdzie pozwala na współdziałanie takiego kodu z nowoczesnymi klasami.

Identyfikacja: Adapter można rozpoznać po konstruktorze przyjmującym instancję innego typu abstrakcji/interfejsu. Gdy adapter otrzymuje wywołanie kierowane do którejś z jego metod, tłumaczy parametry wywołania do stosownego formatu i przekazuje je do jednej lub wielu metod opakowanego obiektu.

Przykład koncepcyjny

Poniższy przykład ilustruje strukturę wzorca Adapter ze szczególnym naciskiem na następujące kwestie:

  • Z jakich składa się klas?
  • Jakie role pełnią te klasy?
  • W jaki sposób elementy wzorca są ze sobą powiązane?

Program.cs: Przykład koncepcyjny

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: Wynik działania

Adaptee interface is incompatible with the client. But with adapter client can call it's method. This is 'Specific request.' 

Adapter w innych językach

Adapter w języku C++ Adapter w języku Go Adapter w języku Java Adapter w języku PHP Adapter w języku Python Adapter w języku Ruby Adapter w języku Rust Adapter w języku Swift Adapter w języku TypeScript