Modèle de stratégie dans un contexte réel : chiffrement de fichiers
Le principe ouvert-fermé (OCP) préconise la conception d'un code ouvert à extension mais fermé à modification. Une façon d’y parvenir consiste à utiliser le modèle de stratégie. Bien que le concept de l'appliquer à différentes classes de validation soit valable, il existe d'autres exemples pratiques où le modèle de stratégie brille.
Considérez le scénario de chiffrement d'un fichier. Le choix de la stratégie de chiffrement dépend de la taille du fichier. Pour les petits fichiers, une stratégie « en mémoire » dans laquelle le fichier entier est conservé en mémoire peut suffire. Cependant, pour les fichiers plus volumineux, une stratégie différente utilisant le chargement partiel de la mémoire et le stockage de fichiers temporaires pour les résultats chiffrés est optimale.
Dans ce contexte, le modèle de stratégie permet plusieurs stratégies de chiffrement, chacune implémentant la même interface. Le code client ne connaît pas la stratégie spécifique utilisée, ce qui simplifie le processus de prise de décision au sein de CipherFactory.
interface Cipher { public void performAction(); } class InMemoryCipherStrategy implements Cipher { public void performAction() { // in-memory encryption logic } } class SwaptToDiskCipher implements Cipher { public void performAction() { // partial memory and temporary file encryption logic } } // client code File file = getFile(); Cipher c = CipherFactory.getCipher(file.size()); c.performAction();
CipherFactory détermine la stratégie appropriée en fonction de la taille du fichier et renvoie une instance au code client. Cette conception permet une intégration transparente de nouvelles stratégies de chiffrement sans modifier le code client, en adhérant aux principes d'OCP. Le résultat est un système de cryptage flexible et extensible capable de gérer efficacement des fichiers de différentes tailles.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!