Adapter

Convierte la interfaz de una clase en la que otra espera. Adapter permite que clases trabajen juntas cosa que no sería posible directamente debido a la incompatibilidad de sus interfaces.

Adapter - uml

class Target
{
// Methods
virtual public void Request()
{
// Normal implementation goes here
}
}
// "Adapter"
class Adapter : Target
{
  // Fields
  private Adaptee adaptee = new Adaptee();
  // Methods
  override public void Request()
  {
    // Possibly do some data manipulation
    // and then call SpecificRequest
    adaptee.SpecificRequest();
  }
}
// "Adaptee"
class Adaptee
{
  // Methods
  public void SpecificRequest()
  {
    Console.WriteLine("Called SpecificRequest()" );
  }
}
/// Client test
public class Client
{
  public static void Main(string[] args)
  {
    // Create adapter and place a request
    Target t = new Adapter();
    t.Request();
  }
}

Este patrón se centra en resolver incompatibilidades entre dos interfaces existentes. Se utiliza para hacer funcionar las cosas después de que estas han sido diseñadas.