mirror of
https://github.com/tiennm99/java-design-patterns.git
synced 2026-05-18 02:59:19 +00:00
ead6373765
* Typo corrections * bridge pattern translated to spanish * builder pattern translated to spanish * context-object pattern translated to spanish * converter pattern translated to spanish * dependency injection pattern translated to spanish * factory pattern translated to spanish * factory-kit pattern translated to spanish * factory-method pattern translated to spanish * monostate pattern translated to spanish * multiton pattern translated to spanish * object mother pattern translated to spanish * object pool pattern translated to spanish * property pattern translated to spanish * prototype pattern translated to spanish * registry pattern translated to spanish * step builder pattern translated to spanish * value object pattern translated to spanish * typo corrections and resources urls refactor * grammar corrections * Add image to each pattern * translate all structural patterns to Spanish --------- Co-authored-by: luismateoh <luismateohm@gmail.com> Co-authored-by: luis.hincapie <luis.hincapie@blankfactor.com>
203 lines
7.1 KiB
Markdown
203 lines
7.1 KiB
Markdown
---
|
|
title: Business Delegate
|
|
category: Structural
|
|
language: es
|
|
tag:
|
|
- Decoupling
|
|
---
|
|
|
|
## Propósito
|
|
|
|
El patrón Business Delegate añade una capa de abstracción entre los niveles de presentación y de negocio. Al utilizar
|
|
este patrón, conseguimos un acoplamiento flexible entre los niveles y encapsulamos el conocimiento sobre cómo localizar,
|
|
conectar e interactuar con los objetos de negocio que componen la aplicación.
|
|
|
|
## También conocido como
|
|
|
|
Service Representative
|
|
|
|
## Explicación
|
|
|
|
Ejemplo del mundo real
|
|
|
|
> Una aplicación para teléfonos móviles promete transmitir a tu dispositivo cualquier película existente. Captura la
|
|
> cadena de búsqueda del usuario y se la pasa al Delegado de Negocio. El Delegado de Negocio selecciona el
|
|
> servicio de streaming de vídeo más adecuado y reproduce el vídeo.
|
|
|
|
En pocas palabras
|
|
|
|
> Business Delegate añade una capa de abstracción entre los niveles de presentación y de negocio.
|
|
|
|
Wikipedia dice
|
|
|
|
> Business Delegate es un patrón de diseño de Java EE. Este patrón está dirigido a reducir el acoplamiento entre los
|
|
> servicios de negocio y el nivel de presentación conectado, y para ocultar los detalles de implementación de los
|
|
> servicios (incluyendo la búsqueda y la accesibilidad de la arquitectura EJB). Los delegados de negocio actúan como un
|
|
> adaptador para invocar objetos de negocio desde la capa de presentación.
|
|
|
|
**Ejemplo programático**
|
|
|
|
En primer lugar, tenemos una abstracción para los servicios de streaming de vídeo `VideoStreamingService` y un par de
|
|
implementaciones `NetflixService` y `YouTubeService`.
|
|
|
|
```java
|
|
public interface VideoStreamingService {
|
|
void doProcessing();
|
|
}
|
|
|
|
@Slf4j
|
|
public class NetflixService implements VideoStreamingService {
|
|
@Override
|
|
public void doProcessing() {
|
|
LOGGER.info("NetflixService is now processing");
|
|
}
|
|
}
|
|
|
|
@Slf4j
|
|
public class YouTubeService implements VideoStreamingService {
|
|
@Override
|
|
public void doProcessing() {
|
|
LOGGER.info("YouTubeService is now processing");
|
|
}
|
|
}
|
|
```
|
|
|
|
A continuación, tenemos un servicio de búsqueda `BusinessLookup` que decide qué servicio de transmisión de vídeo
|
|
utilizar.
|
|
|
|
```java
|
|
|
|
@Setter
|
|
public class BusinessLookup {
|
|
|
|
private NetflixService netflixService;
|
|
private YouTubeService youTubeService;
|
|
|
|
public VideoStreamingService getBusinessService(String movie) {
|
|
if (movie.toLowerCase(Locale.ROOT).contains("die hard")) {
|
|
return netflixService;
|
|
} else {
|
|
return youTubeService;
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
El Delegado de Negocio `BusinessDelegate` utiliza una búsqueda de negocio para dirigir las solicitudes de reproducción
|
|
de películas a un servicio de streaming de vídeo adecuado.
|
|
|
|
```java
|
|
|
|
@Setter
|
|
public class BusinessDelegate {
|
|
|
|
private BusinessLookup lookupService;
|
|
|
|
public void playbackMovie(String movie) {
|
|
VideoStreamingService videoStreamingService = lookupService.getBusinessService(movie);
|
|
videoStreamingService.doProcessing();
|
|
}
|
|
}
|
|
```
|
|
|
|
El cliente móvil `MobileClient` utiliza Business Delegate para llamar al nivel de negocio.
|
|
|
|
```java
|
|
public class MobileClient {
|
|
|
|
private final BusinessDelegate businessDelegate;
|
|
|
|
public MobileClient(BusinessDelegate businessDelegate) {
|
|
this.businessDelegate = businessDelegate;
|
|
}
|
|
|
|
public void playbackMovie(String movie) {
|
|
businessDelegate.playbackMovie(movie);
|
|
}
|
|
}
|
|
```
|
|
|
|
Por último, podemos demostrar el ejemplo completo en acción.
|
|
|
|
```java
|
|
public static void main(String[]args){
|
|
|
|
// preparar los objetos
|
|
var businessDelegate=new BusinessDelegate();
|
|
var businessLookup=new BusinessLookup();
|
|
businessLookup.setNetflixService(new NetflixService());
|
|
businessLookup.setYouTubeService(new YouTubeService());
|
|
businessDelegate.setLookupService(businessLookup);
|
|
|
|
// crear el cliente y utilizar el Business Delegate
|
|
var client=new MobileClient(businessDelegate);
|
|
client.playbackMovie("Die Hard 2");
|
|
client.playbackMovie("Maradona: The Greatest Ever");
|
|
}
|
|
```
|
|
|
|
Aquí está la salida de la consola.
|
|
|
|
```
|
|
21:15:33.790 [main] INFO com.iluwatar.business.delegate.NetflixService - NetflixService is now processing
|
|
21:15:33.794 [main] INFO com.iluwatar.business.delegate.YouTubeService - YouTubeService is now processing
|
|
```
|
|
|
|
## Diagrama de clases
|
|
|
|

|
|
|
|
## Patrones relacionados
|
|
|
|
* [Patrón de localización de servicios](https://java-design-patterns.com/patterns/service-locator/)
|
|
|
|
## Aplicabilidad
|
|
|
|
Utilice el patrón Business Delegate cuando
|
|
|
|
* Desea un acoplamiento flexible entre los niveles de presentación y de negocio.
|
|
* Quieres orquestar llamadas a múltiples servicios de negocio
|
|
* Se desea encapsular las búsquedas y llamadas a servicios.
|
|
* Es necesario abstraer y encapsular la comunicación entre la capa cliente y los servicios de negocio.
|
|
|
|
## Tutoriales
|
|
|
|
* [Patrón Delegado de Negocio en TutorialsPoint](https://www.tutorialspoint.com/design_pattern/business_delegate_pattern.htm)
|
|
|
|
## Usos conocidos
|
|
|
|
* Aplicaciones empresariales que utilicen Java EE (Java Platform, Enterprise Edition)
|
|
* Aplicaciones que requieren acceso remoto a servicios empresariales
|
|
|
|
## Consecuencias
|
|
|
|
Ventajas:
|
|
|
|
* Desacoplamiento de los niveles de presentación y de negocio: Permite que el nivel de cliente y los servicios
|
|
empresariales evolucionen de forma independiente.
|
|
* Transparencia de ubicación: Los clientes no se ven afectados por cambios en la ubicación o la instanciación de los
|
|
servicios de negocio.
|
|
* Reutilización y escalabilidad: Los objetos Business Delegate pueden ser reutilizados por múltiples clientes, y el
|
|
patrón soporta el equilibrio de carga y la escalabilidad.
|
|
carga y escalabilidad.
|
|
|
|
Contrapartidas:
|
|
|
|
* Complejidad: Introduce capas y abstracciones adicionales que pueden aumentar la complejidad.
|
|
* Sobrecarga de rendimiento: La indirección adicional puede suponer una ligera penalización en el rendimiento.
|
|
|
|
## Patrones relacionados
|
|
|
|
* [Localizador de servicios](https://java-design-patterns.com/patterns/service-locator/): El Delegado de Negocio (
|
|
Business Delegate) utiliza el Localizador de Servicios (Service Locator) para localizar servicios de negocio.
|
|
* [Fachada de Sesión](https://java-design-patterns.com/patterns/session-facade/): El Delegado de Negocio (Business
|
|
Delegate) puede utilizar la Fachada de Sesión (Session Facade) para proporcionar una interfaz unificada a un conjunto
|
|
de servicios de negocio.
|
|
* [Entidad Compuesta](https://java-design-patterns.com/patterns/composite-entity/): El Delegado (Business Delegate) de
|
|
Negocio puede utilizar Entidad Compuesta (Composite Entity) para gestionar el estado de los servicios de negocio.
|
|
|
|
## Créditos
|
|
|
|
* [J2EE Design Patterns](https://www.amazon.com/gp/product/0596004273/ref=as_li_tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=0596004273&linkCode=as2&tag=javadesignpat-20&linkId=48d37c67fb3d845b802fa9b619ad8f31)
|
|
* [Core J2EE Patterns: Best Practices and Design Strategies](https://www.amazon.com/gp/product/0130648841/ref=as_li_qf_asin_il_tl?ie=UTF8&tag=javadesignpat-20&creative=9325&linkCode=as2&creativeASIN=0130648841&linkId=a0100de2b28c71ede8db1757fb2b5947)
|