login as:
~/abapcraft.dev — code, crafted in SAP
florin@s4hana:~/abap/posts/factory-pattern/src/zcl_vehicle_factory.clas.abap $ cat zcl_vehicle_factory.clas.abap
factory-pattern / src / zcl_vehicle_factory.clas.abap
ABAP 27 lines
CLASS zcl_vehicle_factory DEFINITION
  PUBLIC FINAL CREATE PUBLIC.

  PUBLIC SECTION.

    CLASS-METHODS create_vehicle
      IMPORTING
        iv_type        TYPE string
      RETURNING
        VALUE(ro_vehicle) TYPE REF TO zif_vehicle
      RAISING
        cx_sy_create_object_error.

ENDCLASS.


CLASS zcl_vehicle_factory IMPLEMENTATION.

  METHOD create_vehicle.
    ro_vehicle = SWITCH #( to_upper( iv_type )
      WHEN 'CAR'   THEN NEW zcl_car( )
      WHEN 'TRUCK' THEN NEW zcl_truck( )
      ELSE RAISE EXCEPTION TYPE cx_sy_create_object_error ).
  ENDMETHOD.

ENDCLASS.