mirror of
https://github.com/tiennm99/java-design-patterns.git
synced 2026-10-14 02:16:06 +00:00
* 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>
This commit is contained in:
52 files changed
+3590
No files matched your search
@@ -0,0 +1,202 @@
|
||||
---
|
||||
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)
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 49 KiB |
Reference in new issue
Block a user