Patrón Comando: Implementación y Gestión de Comandos en Kotlin

Clase 22 de 32Curso de Patrones de Diseño en Android

Resumen

¿Qué es el patrón Command y cómo se utiliza?

El patrón Command es un patrón de diseño de comportamiento que se encarga de encapsular solicitudes como objetos, permitiéndote parametrizar clientes con comandos, filas de solicitudes o registros de operaciones. La clave de este patrón radica en encapsular la lógica en pequeños "comandos". Estos comandos no solo son manejables, sino que también son controlados por una entidad conocida como el Command Manager.

¿Cuándo se debe implementar el patrón Command?

La implementación del patrón Command es ideal cuando detectas lógicas o procesos repetitivos a lo largo del proyecto. Al encapsular estas lógicas en comandos, optimizas el código y facilitas la reutilización. Además, el Command Manager ofrece una forma sencilla de gestionar y ejecutar estos comandos bajo demanda.

¿Cómo se implementa el patrón Command?

La implementación del patrón Command sigue un esquema estructurado:

  1. Creación de comandos: Los comandos se encapsulan en interfaces específicas con funciones claras.
  2. Command Manager: Una clase que maneja la vida útil de los comandos permitiendo agregarlos, quitarlos y ejecutarlos.

Implementación paso a paso

  1. Crear el paquete Command:

    Primero, crea un paquete que albergará todos los comandos de tu proyecto, así:

    package com.example.comand
    
    interface FileCommand {
        fun execute(context: Context, fileName: String, vararg args: String)
    }
    
  2. Diseñar la interfaz del comando:

    Aquí definimos la estructura básica que cada comando debe seguir.

    interface FileCommand {
        fun execute(context: Context, fileName: String, vararg args: String)
    }
    
  3. Implementación del Command Manager:

    Un manager es crucial para gestionar los comandos. Facilita la agregación, eliminación y ejecución de comandos.

    class FileCommandManager {
        private val commands = mutableMapOf<String, FileCommand>()
    
        fun putCommand(name: String, command: FileCommand) {
            commands[name] = command
        }
    
        fun getCommand(name: String): FileCommand {
            return commands[name] ?: throw RuntimeException("Command $name not registered")
        }
    }
    
  4. Agregar y solicitar comandos:

    Puedes poner comandos en el manager y solicitarlos conforme sea necesario.

    val manager = FileCommandManager()
    
    fun addCommands() {
        manager.putCommand("SaveFile", SaveFileCommand())
    }
    
    fun executeCommand(name: String, context: Context, fileName: String) {
        val command = manager.getCommand(name)
        command.execute(context, fileName)
    }
    

Consejos para aprovechar el patrón Command

  • Maximiza la reutilización: Al encapsular lógicas comunes en comandos, facilitas la reutilización en diferentes partes del proyecto.
  • Gestión centralizada: Usa el Command Manager para centralizar el control de comandos, lo que simplifica la administración de lógicas complejas.
  • Flexibilidad: Permite la adición y eliminación de comandos en tiempo de ejecución sin alterar el código base principal.

El patrón Command no solo organiza, sino que también permite mayor flexibilidad y capacidad de gestión sobre el flujo y la ejecución de procesos en tu proyecto. ¿Estás listo para implementar el patrón Command en tu proyecto y mejorar su arquitectura?