2: Segundo Patrón de diseño - FranzBurneo/Patrones-de-dise-o GitHub Wiki
Adapter pertenece al grupo de los patrones de diseño estructural, este patrón permite la colaboración de objetos con interfaces incompatibles.
El patrón de adaptador funciona como un puente entre dos interfaces incompatibles. Este tipo de patrón de diseño viene bajo patrón estructural ya que este patrón combina la capacidad de dos interfaces independientes.
Este patrón involucra una sola clase que se encarga de unir funcionalidades de interfaces independientes o incompatibles. Un ejemplo de la vida real podría ser el caso de un lector de tarjetas que actúa como adaptador entre la tarjeta de memoria y una computadora portátil. Conecta la tarjeta de memoria al lector de tarjetas y el lector de tarjetas a la computadora portátil para que la tarjeta de memoria se pueda leer a través de la computadora portátil.
A continuación, el método display() de un componente _Rectangle _ heredado espera recibir parámetros "x, y, w, h". Pero el cliente quiere pasar "xey superior izquierda" y "xey inferior derecha". Esta incongruencia se puede conciliar agregando un nivel adicional de direccionamiento indirecto, es decir, un objeto Adaptador.
El adaptador también se puede considerar como un "contenedor".
El patrón Adaptador permite que las clases que de otro modo serían incompatibles trabajen juntas al convertir la interfaz de una clase en una interfaz esperada por los clientes. Las llaves de tubo proporcionan un ejemplo del adaptador. Un enchufe se conecta a un trinquete, siempre que el tamaño de la unidad sea el mismo. Los tamaños de impulsión típicos en los Estados Unidos son 1/2 "y 1/4". Obviamente, un trinquete de transmisión de 1/2 "no encajará en un dado de transmisión de 1/4" a menos que se utilice un adaptador. Un adaptador de 1/2 "a 1/4" tiene una conexión hembra de 1/2 "para encajar en el trinquete impulsor de 1/2" y una conexión macho de 1/4 "para encajar en el dado de impulsión de 1/4".
En el patrón de diseño del adaptador, una clase convierte la interfaz de una clase en lo que espera otra clase.
En este ejemplo tenemos una clase SimpleBook que tiene métodos getAuthor() y getTitle(). El cliente espera un método getAuthorAndTitle(). Para "adaptar" SimpleBook para testAdapter tenemos una clase de adaptador BookAdapter, que toma una instancia de SimpleBook y usa los métodos SimpleBook getAuthor() y getTitle() en su propio método getAuthorAndTitle().
Los adaptadores son útiles si desea utilizar una clase que no tiene los métodos exactos que necesita y no puede cambiar la clase original. El adaptador puede tomar los métodos a los que puede acceder en la clase original y adaptarlos a los métodos que necesite.
<?php
class SimpleBook {
private $author;
private $title;
function __construct($author_in, $title_in) {
$this->author = $author_in;
$this->title = $title_in;
}
function getAuthor() {
return $this->author;
}
function getTitle() {
return $this->title;
}
}
class BookAdapter {
private $book;
function __construct(SimpleBook $book_in) {
$this->book = $book_in;
}
function getAuthorAndTitle() {
return $this->book->getTitle().' by '.$this->book->getAuthor();
}
}
writeln('BEGIN TESTING ADAPTER PATTERN');
writeln('');
$book = new SimpleBook("Gamma, Helm, Johnson, and Vlissides", "Design Patterns");
$bookAdapter = new BookAdapter($book);
writeln('Author and Title: '.$bookAdapter->getAuthorAndTitle());
writeln('');
writeln('END TESTING ADAPTER PATTERN');
function writeln($line_in) {
echo $line_in."<br/>";
}
?>
BEGIN TESTING ADAPTER PATTERN
Author and Title: Design Patterns by Gamma, Helm, Johnson, and Vlissides
END TESTING ADAPTER PATTERN