LinkedIn Post

GoHost > Blog > abap > LinkedIn Post

Patrón Factory en ABAP: Una guía completa

Patrón Factory ABAP

Contáctame por WhatsApp

El patrón de diseño Factory es uno de los más utilizados en el desarrollo de software orientado a objetos. Este patrón pertenece a la categoría de patrones creacionales, lo que significa que se centra en la creación de objetos. En lugar de instanciar un objeto directamente, se delega la responsabilidad de creación a una clase que se encarga de construir los objetos pertinentes. En este artículo, exploraremos cómo funciona el patrón Factory en ABAP, su implementación y sus ventajas.

¿Qué es el Patrón Factory?

El patrón Factory permite a los desarrolladores crear objetos de diferentes tipos, o subtipos, sin especificar la clase exacta del objeto que se va a crear. Esto se logra a través de un «método de fábrica» que devuelve un objeto del tipo deseado, lo que permite una mayor flexibilidad y encapsulación en la creación de instancias.

¿Por qué usar el Patrón Factory?

  • Desacoplamiento: Uno de los principales beneficios del patrón Factory es que desacopla la creación de objetos del uso de esos objetos. Los consumidores pueden trabajar con interfaces y no necesitan saber cómo se crean las instancias subyacentes.

  • Flexibilidad: Si se quiere cambiar la implementación de un objeto, se puede hacer simplemente modificando la clase Factory sin afectar a los consumidores.

  • Facilidad de mantenimiento: Este patrón hace que sea más fácil mantener y cambiar el código, ya que las responsabilidades están claramente definidas.

Implementación del Patrón Factory en ABAP

Paso 1: Definir la Interfaz

Primero, se debe definir una interfaz común que todas las clases de productos implementarán. Esta interfaz contiene los métodos que se pueden invocar en los objetos fabricados.

INTERFACE if_product.
  METHODS: do_something.
ENDINTERFACE.

Paso 2: Crear Clases Concretas

Luego, se crean clases concretas que implementen la interfaz del producto. Estas clases proporcionarán implementaciones específicas del método definido en la interfaz.

CLASS cl_product_a DEFINITION.
  INTERFACES if_product.
ENDCLASS.

CLASS cl_product_a IMPLEMENTATION.
  METHOD if_product~do_something.
    WRITE: / 'Product A logic'.
  ENDMETHOD.
ENDCLASS.

CLASS cl_product_b DEFINITION.
  INTERFACES if_product.
ENDCLASS.

CLASS cl_product_b IMPLEMENTATION.
  METHOD if_product~do_something.
    WRITE: / 'Product B logic'.
  ENDMETHOD.
ENDCLASS.

Paso 3: Crear la Clase Factory

A continuación, se crea la clase Factory que contendrá un método que decide qué clase de producto crear y devuelve una instancia de ella.

CLASS cl_product_factory DEFINITION.
  PUBLIC SECTION.
    METHODS: create_product IMPORTING iv_type TYPE string
                             RETURNING VALUE(ro_product) TYPE REF TO if_product.
ENDCLASS.

CLASS cl_product_factory IMPLEMENTATION.
  METHOD create_product.
    CASE iv_type.
      WHEN 'A'.
        CREATE OBJECT ro_product TYPE cl_product_a.
      WHEN 'B'.
        CREATE OBJECT ro_product TYPE cl_product_b.
      WHEN OTHERS.
        RAISE EXCEPTION TYPE cx_sy_unsupported_type.
    ENDCASE.
  ENDMETHOD.
ENDCLASS.

Paso 4: Usar la Fábrica

Finalmente, en el programa principal o en cualquier parte donde se necesite crear instancias, se puede usar la clase Factory para obtener objetos.

DATA: lo_product TYPE REF TO if_product,
      lo_factory TYPE REF TO cl_product_factory.

CREATE OBJECT lo_factory.

lo_product = lo_factory->create_product( 'A' ).
lo_product->do_something( ).

lo_product = lo_factory->create_product( 'B' ).
lo_product->do_something( ).

Ventajas del Patrón Factory en ABAP

  1. Promueve la reutilización de código: Una vez que se ha creado la clase de fábrica, puede reutilizarse en varios lugares, lo que evita la duplicación del código de creación de instancias.

  2. Conforma al principio de inversión de dependencias: Las clases no dependen de implementaciones concretas, sino que trabajan con interfaces. Esto es especialmente importante para pruebas unitarias y desarrollo ágil.

  3. Facilita la implementación de nuevas funcionalidades: Si se necesita añadir un nuevo tipo de producto, solo se necesita crear una nueva clase que implemente la interfaz y modificar el método de la fábrica en consecuencia.

Casos de Uso del Patrón Factory

El patrón Factory es útil en varias situaciones, tales como:

  • Cuando el proceso de creación de un objeto es complejo.
  • Cuando se necesita crear diferentes tipos de objetos a partir de la misma familia.
  • En sistemas donde es probable que se agreguen nuevas clases de manera regular.

Conclusión

El patrón Factory proporciona una manera efectiva y limpia de crear objetos en ABAP sin exponer la lógica de creación al resto de la aplicación. Al implementar este patrón, se logra un diseño flexible, desacoplado, y más fácil de mantener.

Ver más temas relacionados

  1. Software Patterns in ABAP — Factory Pattern – Un blog que explora más ejemplos sobre el patrón Factory en ABAP.
  2. El patrón Factory en Kotlin. – Una explicación que compara cómo se implementa el patrón Factory en diferentes lenguajes, incluyendo ABAP.
  3. Patrón de diseño Factory: las claves del patrón Factory Method. – Un artículo que detalla las ventajas y desventajas del patrón Factory.
  4. ABAP Factory – abhiyanta – Una descripción completa del patrón Factory en el contexto de ABAP, con ejemplos y casos de éxito.
  5. Patrón de Diseño Factory – Oscar Blancarte – Un artículo que describe el patrón Factory y sus aplicaciones en el desarrollo de software.