Patron Filtre
Le patron de filtre ou le patron de critères est un patron de conception qui permet aux développeurs de filtrer un ensemble d’objets à l’aide de différents critères et de les relier de manière découplée au moyen d’opérations logiques. Ce type de patron de conception appartient aux patrons structurels, car il combine plusieurs critères pour obtenir un seul standard.
summary
intention
Utilisé pour encapsuler le processus de filtrage des objets, permettant de filtrer dynamiquement les objets en utilisant différents critères de filtrage.
Principaux problèmes résolus
Lorsqu’un ensemble d’objets doit être filtré en fonction de plusieurs conditions ou critères différents, le patron de filtre offre un moyen flexible de définir ces conditions, en évitant de coder en dur la logique de filtrage dans le code client.
Cas d'utilisation
- Lorsqu’une collection d’objets doit être filtrée selon différents critères.
- Lorsque la logique de filtrage peut changer, ou lorsque plusieurs conditions de filtrage doivent être combinées dynamiquement.
Approche d'implémentation
- Définir l’interface de filtre: Créer une interface de filtre et définir une méthode de filtrage.
- Implémenter des filtres concrets: Implémenter l'interface de filtre pour chaque critère de filtrage, en encapsulant la logique de filtrage spécifique.
- Filtre composite: Permettre de combiner des filtres pour former une logique de filtrage complexe.
Code clé
- Interface de filtre: Définir la méthode de filtrage, telle que
matches()。 - Classe de filtre concrète: Implémenter l'interface de filtre et encapsuler la logique de filtrage spécifique.
- Filtre composite: Implémenter une logique de combinaison de filtres, telle que le ET logique, le OU logique, etc.
Exemple d'application
- Système de gestion de livres: Filtrer des livres selon différents critères tels que l'auteur, l'année de publication et la catégorie.
- Plateforme d'achat en ligne: Filtrer des produits selon des conditions telles que le prix, la marque et la note des utilisateurs.
Avantages
- Encapsulation: La logique de filtrage est encapsulée dans des objets de filtre indépendants.
- Flexibilité: Les conditions de filtrage peuvent être ajoutées, modifiées ou combinées dynamiquement.
- Extensibilité: De nouveaux critères de filtrage peuvent être facilement ajoutés sans modifier le code existant.
Inconvénients
- Complexité: À mesure que les conditions de filtrage augmentent, le système peut devenir complexe.
- Problèmes de performance: Si la combinaison de filtres est trop complexe, les performances peuvent être affectées.
Suggestions d'utilisation
- Lorsque la logique de filtrage peut changer ou que des objets doivent être filtrés dynamiquement selon différents critères, envisagez d'utiliser le patron Filter.
- Lors de la conception, assurez-vous que l'interface de filtre et ses implémentations restent cohérentes pour faciliter la combinaison et l'extension.
Notes
- Assurez-vous que la logique de combinaison des filtres est correcte afin d'éviter d'introduire des erreurs logiques.
- Lors de l'implémentation, tenez compte de l'impact sur les performances, en particulier lors du traitement de grandes quantités de données.
summary
Le patron Filter comprend les rôles principaux suivants :
Interface de filtre (Filter/Criteria): Définir une interface pour filtrer des objets. Cette interface contient généralement une méthode pour filtrer des objets selon des conditions spécifiques.
Classes de filtre concrètes (Concrete Filter/Concrete Criteria): Implémenter l'interface de filtre pour définir spécifiquement les conditions et la logique de filtrage des objets.
Collection d'objets (éléments/objets à filtrer): La collection d'objets à filtrer. Ces objets sont généralement des instances avec des attributs communs, comme un groupe de personnes, un groupe de produits, etc.
Client: Utiliser des classes de filtre concrètes pour filtrer des collections d'objets. Le client combine la collection d'objets avec des filtres pour obtenir les objets qui répondent aux critères.
Implémentation
Nous allons créer unPersonObject,CriteriaL'interface et les classes d'entité qui implémentent l'interface, pour filtrerPersonliste d'objets.CriteriaPatternDemoUtilisation de la classeCriteriaobjets, filtrer selon divers critères et leurs combinaisonsPersonliste d'objets.
Étape 1
Créez une classe à laquelle les critères sont appliqués.
Person.java
Étape 2
Créer une interface pour Criteria.
Criteria.java
Étape 3
Créer une implémentationCriteriaclasse d'entité de l'interface.
CriteriaMale.java
CriteriaFemale.java
CriteriaSingle.java
AndCriteria.java
OrCriteria.java
Étape 4
Utilisez différents Criteria et leurs combinaisons pour filtrerPersonliste d'objets.
CriteriaPatternDemo.java
Étape 5
Exécutez le programme, le résultat s'affiche :
Males: Person : [ Name : Robert, Gender : Male, Marital Status : Single ] Person : [ Name : John, Gender : Male, Marital Status : Married ] Person : [ Name : Mike, Gender : Male, Marital Status : Single ] Person : [ Name : Bobby, Gender : Male, Marital Status : Single ] Females: Person : [ Name : Laura, Gender : Female, Marital Status : Married ] Person : [ Name : Diana, Gender : Female, Marital Status : Single ] Single Males: Person : [ Name : Robert, Gender : Male, Marital Status : Single ] Person : [ Name : Mike, Gender : Male, Marital Status : Single ] Person : [ Name : Bobby, Gender : Male, Marital Status : Single ] Single Or Females: Person : [ Name : Robert, Gender : Male, Marital Status : Single ] Person : [ Name : Diana, Gender : Female, Marital Status : Single ] Person : [ Name : Mike, Gender : Male, Marital Status : Single ] Person : [ Name : Bobby, Gender : Male, Marital Status : Single ] Person : [ Name : Laura, Gender : Female, Marital Status : Married ]autres extensions