Patrón de diseño FACADE en PHP

Francisco Ugalde
Aug 21, 2019 · 3 min read

El patrón FACADE o Fachada

El objetivo principal del patrón de diseño FACADE en PHP es el de simplificar nuestro sistema gracias a que permite exponer una interfaz mas amigable y fácil de digerir sin necesidad de conocer a fondo cada uno de los sub sistemas que se agrupan en esta “fachada”.

Para tratar de entender mejor el concepto, veamos un diagrama para visualizar mejor el patrón FACADE:

Aquí podemos ver que tenemos 3 subsistemas el cual son la clase Twitter, Instagram y Facebook, el cual cuya funcionalidad puede ser agrupada en la clase FACADE que hemos llamado: SocialNetworksClass quien posteriormente sera utilizada por cualquier clase de servicio.

Continuando con lo presentado en el diagrama, te muestro un ejemplo de código:

Ejemplo de implementación del Patrón de diseño FACADE en PHP

interface SocialNetworksInterface
{
public function publish();
public function follow();
public function unfollow();
public function addLike();
public function retweet();
}

interface TwitterAPIClientInterface
{
public function tweet();
public function follow();
public function unfollow();
public function addLike();
public function retweet();
}

interface InstagramAPIClientInterface
{
public function publish();
public function follow();
public function unfollow();
public function addLike();
}

interface FacebookAPIClientInterface
{
public function addPost();
public function addLike();
}

class SocialNetworks implements SocialNetworksInterface
{
/**
* @var TwitterAPIClientInterface
*/
protected $twitterApiClient;

/**
* @var InstagramAPIClient
*/
protected $instagramApiClient;

/**
* @var FacebookAPIClient
*/
protected $facebookApiClient;

public function __construct(
TwitterAPIClientInterface $twitterApiClient,
InstagramAPIClientInterface $instagramApiClient,
FacebookAPIClientInterface $facebookApiClient
) {
}

public function publish()
{
$this->twitterApiClient->tweet();
$this->instagramApiClient->publish();
$this->facebookApiClient->addPost();
}

public function follow()
{
$this->twitterApiClient->follow();
$this->instagramApiClient->follow();
}

public function unfollow()
{
$this->twitterApiClient->unfollow();
$this->instagramApiClient->unfollow());
}

public function addLike()
{
$this->twitterApiClient->addLike();
$this->instagramApiClient->addLike();
$this->facebookApiClient->addLike();
}

public function retweet()
{
$this->twitterApiClient->retweet();
}

}

class TwitterAPIClient implements TwitterAPIClientInterface
{
public function tweet()
{
// tweet() method implementation
}

public function follow()
{
// follow() method implementation
}

public function unfollow()
{
// unfollow() method implementation
}

public function addLike()
{
// addLike() method implementation
}

public function retweet()
{
// retweet() method implementation
}

}

class InstagramAPIClient implements InstagramAPIClientInterface
{
public function publish()
{
// publich() method implementation
}

public function follow()
{
// follow() method implementation
}

public function unfollow()
{
// unfollow() method implementation
}

public function addLike()
{
// addLike() method implementation
}

}

class FacebookAPIClient implements FacebookAPIClientInterface
{
public function addPost()
{
// addPost() method implementation
}

public function addLike()
{
// addLike() method implementation
}
}

El ejemplo que expongo es a manera ilustrativa de cómo implementar el patrón de diseño FACADE en tus proyectos.

En el ejemplo expuesto se puede apreciar como toda la funcionalidad de tres sub sistemas, Twitter, Facebook e Instagram, quedan envueltas en una clase FACHADA o FACADE.

Esto permite simplificar radicalmente la implementación de uno o varios sub sistemas en clases de servicios o en cualquier otro punto donde sea requerido.

Ademas que la clase que implementa nuestra clase FACADE no necesita saber internamente cómo funciona cada sub sistema.

Recuerda que si tienes alguna sugerencia o pregunta, no dudes en dejar tus comentarios al final del post.

Si te gustó este post, ayúdame a que pueda servirle a muchas más personas, compartiendo mis contenidos en tus redes sociales.

Espero que este post haya sido de gran ayuda para ti, y como siempre, cualquier inquietud o duda que tengas, puedes contactarme por cualquiera de las vías disponibles, o dejando tus comentarios al final de este post.

También puedes sugerir que temas o post te gustaría leer a futuro.

Francisco Ugalde

Francisco Ugalde

Written by

Senior Software Engineer | I love coding, software architectures and all new technologies. I’ll try to share, in an easy way, all the bits of my head.

Francisco Ugalde

Blog sobre tecnología, desarrollo de software y mobile

Francisco Ugalde

Written by

Senior Software Engineer | I love coding, software architectures and all new technologies. I’ll try to share, in an easy way, all the bits of my head.

Francisco Ugalde

Blog sobre tecnología, desarrollo de software y mobile

Medium is an open platform where 170 million readers come to find insightful and dynamic thinking. Here, expert and undiscovered voices alike dive into the heart of any topic and bring new ideas to the surface. Learn more

Follow the writers, publications, and topics that matter to you, and you’ll see them on your homepage and in your inbox. Explore

If you have a story to tell, knowledge to share, or a perspective to offer — welcome home. It’s easy and free to post your thinking on any topic. Write on Medium

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store