Muy buenas, les saluda Miguel y esta vez les traigo otro nuevo post.
Índice
Patrón de Diseño de Estrategia
Es un tipo de patrón de diseño de comportamiento que encapsula una «familia» de algoritmos y selecciona uno de la piscina para su uso durante el tiempo de ejecución. Los algoritmos son intercambiables, lo que significa que son sustituibles entre sí.
Consulte el código fuente de la aplicación para que le resulte más fácil seguir el tutorial.
Problema
En nuestra aplicación de películas. La aplicación crea una lista de las películas y programas de televisión mejor calificados de una API. La aplicación también contiene opciones de filtro. Tenemos 3 tipos de filtros (género, año y tasa).
Obtenemos una lista de películas del servidor y aplicamos cada filtro mediante una casilla de verificación para cada una. El problema aquí es que debemos aplicar cada filtro sin afectar al anterior, por ejemplo, si elegimos el filtro de género y luego elegimos el filtro de año , necesito que la lista de géneros se actualice y aplique el filtro de año. Además, si eliminamos el filtro de año, necesitamos que se muestre la lista filtrada por género (no la original).
Solución
El patrón de diseño de estrategia resolverá este problema sin problemas y fácilmente.
Implementación
Tenemos tres variables para filtrar:
year: Integer , genreId: Integer , tasa: Double.
- Necesitamos crear una clase genérica para poder usar los mismos métodos para Integer y Double.
- Luego, necesitamos crear una interfaz con un solo método que se usa para llamar a los otros métodos.
public interface Filterable { ArrayList<Item> applyFilter(ArrayList<Item> arrayList); }
- Ahora, necesitamos implementar una clase para cada filtro (todos tienen que extender la clase genérica e implementar la interfaz).
A tener en cuenta: Hemos usado Double no double porque podemos asignarlo con un valor nulo (lo mismo ocurre con Integer).
- Lo último que debemos implementar es una clase para administrar todos los filtros.
Como puede ver, esta clase contiene solo un método llamado applyFilters () que es responsable de crear una nueva ArrayList y aplicarle cada filtro.
Nota: El parámetro Filterable … filters nos permite pasar variables tanto como necesitemos como veremos en el siguiente paso.
En los siguientes pasos, veremos cómo el patrón de estrategia nos facilita la vida.
- Inicialice 2 listas de matrices.
ArrayList<Item> filteredList, originalList;
- Obtenga los datos de la API y guárdelos en originalList.
operations.fetchTopRated(MediaType.MOVIE.getValue(), items -> { originalList = new ArrayList<>(items); mainAdapter = new MainAdapter(getActivity(), originalList); mainListView.setAdapter(mainAdapter); });
- Utilice las clases que hemos implementado en los pasos anteriores.
Como puede ver, declaramos un objeto de cada clase de filtro y establecemos su valor en el que el usuario ha elegido.
En la última línea, llamamos al FilterManager clase que es responsable de aplicar el filtro adecuado y asignar la salida a FilterList.
Gracias por leer.
Añadir comentario