Patron Objet Nul
Dans le patron d'objet nul, un objet nul remplace la vérification des instances d'objet NULL. Au lieu de vérifier les valeurs nulles, l'objet nul répond par une relation qui ne fait rien. Un tel objet nul peut également fournir un comportement par défaut lorsque les données ne sont pas disponibles.
Dans le patron de conception Objet nul, nous créons une classe abstraite qui spécifie diverses opérations à effectuer et des classes d'entités qui étendent cette classe, et nous créons également une classe objet nul qui n'implémente rien pour la classe. Cette classe objet nul est utilisée de manière transparente dans les endroits où des vérifications de nullité sont nécessaires.
summary
intention
Utilisez un objet nul au lieu d'une valeur nulle. L'objet nul implémente la même interface, mais n'effectue aucune opération ou fournit des opérations par défaut pour les requêtes.
Principaux problèmes résolus
- Le patron de conception Objet nul résout les problèmes pouvant découler de l'utilisation de valeurs nulles dans un système, tels que les exceptions NullPointerException.
- Il permet au système de continuer à fonctionner avec un objet nul « sûr » lorsqu'aucun objet approprié n'est disponible, plutôt que d'échouer.
Cas d'utilisation
- Lorsque le système doit gérer des objets nuls, mais souhaite également éviter les vérifications de nullité ou la gestion des valeurs nulles.
Approche d'implémentation
- Définir le protocole:Définir un protocole ou une interface qui spécifie les comportements à implémenter.
- Création d'objets concrets:Des objets concrets qui implémentent le protocole et fournissent le comportement réel.
- Créer un objet nul:Implémenter également le même protocole, mais fournir une implémentation « vide », c'est-à-dire qu'aucune opération significative n'est effectuée.
Code clé
- Protocole ou interface:Spécifie les méthodes que l'objet doit implémenter.
- Objet concret:Implémente le protocole et contient la logique métier réelle.
- Objet nul:Implémente le protocole, mais les implémentations de méthodes sont vides ou des comportements par défaut.
Exemple d'application
- Système de journalisation:Dans un système de journalisation, un objet nul peut représenter un journaliseur qui n'effectue aucune opération.
- Utilisateur par défaut:Dans un système, s'il n'y a actuellement aucun utilisateur, un objet utilisateur vide peut être utilisé à la place de null.
Avantages
- Éviter les vérifications de null:Élimine les vérifications de null dans le code.
- Simplification du code client:Les clients peuvent appeler directement les méthodes, que l'objet soit null ou non.
- Extensibilité:L'ajout de nouveaux objets concrets est transparent pour les clients, sans nécessiter de modification du code existant.
Inconvénients
- Peut masquer des erreurs:L'utilisation d'objets null peut masquer des erreurs ou des conditions exceptionnelles, rendant le débogage difficile.
- Augmente la complexité de la conception:Un objet null doit être implémenté pour chaque interface susceptible de renvoyer null.
Suggestions d'utilisation
- Lorsque le système doit gérer des valeurs null, mais souhaite aussi simplifier la gestion des erreurs et éviter les vérifications de null, envisagez d'utiliser le patron Null Object.
Notes
- Le patron Null Object doit être utilisé avec prudence afin de s'assurer qu'il ne masque pas les erreurs ni l'état réel du système.
- Un objet null doit fournir la même interface que les objets concrets, afin que le code client puisse l'utiliser sans aucune modification.
Structure
Le patron Null Object comprend les principaux rôles suivants:
AbstractionObject(Objet abstrait):Définit l'interface attendue par le client. Cette interface peut être une classe abstraite ou une interface.
Objet concret(Objet concret):Classes concrètes qui implémentent l'interface d'objet abstrait. Ces classes fournissent un comportement réel.
Objet nul: Une classe d'objet nul qui implémente l'interface d'objet abstraite. Cette classe fournit un comportement par défaut sans effet à utiliser lorsque l'objet est indisponible ou non applicable. Elle peut servir de substitut aux objets concrets, en remplaçant les vérifications de null dans le code client.
Implémentation
Nous allons en créer une qui définit des opérations (ici, le nom du client) ...AbstractCustomerClasse abstraite, et étenduAbstractCustomerles classes d'entité de la classe. Classe de fabriqueCustomerFactoryEn fonction du nom passé par le client, retournezRealCustomerouNullCustomerObjet.
NullPatternDemo, notre classe de démonstration utiliseCustomerFactorypour démontrer l'utilisation du patron Null Object.
Étape 1
Créez une classe abstraite.
AbstractCustomer.java
Étape 2
Créez des classes d'entité qui étendent la classe ci-dessus.
RealCustomer.java
NullCustomer.java
Étape 3
CréerCustomerFactoryclasse.
CustomerFactory.java
Étape 4
UtilisationCustomerFactory, en fonction du nom fourni par le client, pour obtenirRealCustomerouNullCustomerObjet.
NullPatternDemo.java
Étape 5
Exécutez le programme, le résultat s'affiche :
Customers Rob Not Available in Customer Database Julie Not Available in Customer Databaseautres extensions