Le modèle de conception de stratégie est un modèle de conception comportemental qui permet de sélectionner le comportement d'un algorithme au moment de l'exécution.
Au lieu de implémenter plusieurs variantes d'un algorithme dans une seule classe, il vous permet de définir une famille d'algorithmes, d'encapsuler chacun dans sa propre classe et de les rendre interchangeables.
Classe de contexte : conserve une référence à un objet de stratégie et interagit avec lui via une interface commune.
Interface de stratégie : définit une interface commune pour toutes les stratégies concrètes.
Stratégies concrètes : implémentez l'interface Stratégie avec des algorithmes spécifiques.
Utilisez le modèle de stratégie lorsque les avantages de la flexibilité et de la maintenabilité l'emportent sur les frais généraux liés à la gestion de plusieurs classes de stratégie.
De nombreux algorithmes :
Décisions d'exécution :
Évitez l'utilisation excessive des instructions if ou switch :
Encapsulation des variations :
Principe ouvert/fermé :
from abc import ABC, abstractmethod from enum import Enum # Enum for User Types class UserType(Enum): FREE = 0 BASIC = 1 PREMIUM = 2 # Strategy Interface for Quality class Quality(ABC): @abstractmethod def get_quality(self): pass # Strategy Interface for Ad Policy class AdPolicy(ABC): @abstractmethod def has_ads(self): pass # Concrete Strategy for Quality class FreeUserQuality(Quality): def get_quality(self): return ['SD'] class BasicUserQuality(Quality): def get_quality(self): return ['SD', 'HD'] class PremiumUserQuality(Quality): def get_quality(self): return ['SD', 'HD', 'UHD'] # Concrete Strategy for Ad Policy class FreeUserAdPolicy(AdPolicy): def has_ads(self): return True class BasicUserAdPolicy(AdPolicy): def has_ads(self): return True class PremiumUserAdPolicy(AdPolicy): def has_ads(self): return False # Context Class class User: def __init__(self, user_type: UserType, quality: Quality, ad_policy: AdPolicy): self.user_type = user_type self.quality = quality self.ad_policy = ad_policy def get_quality(self): return self.quality.get_quality() def has_ads(self): return self.ad_policy.has_ads() # Usage free_user = User(UserType.FREE, FreeUserQuality(), FreeUserAdPolicy()) basic_user = User(UserType.BASIC, BasicUserQuality(), BasicUserAdPolicy()) premium_user = User(UserType.PREMIUM, PremiumUserQuality(), PremiumUserAdPolicy()) print("Free User Quality:", free_user.get_quality()) # ['SD'] print("Free User Ads:", free_user.has_ads()) # True print("Premium User Quality:", premium_user.get_quality()) # ['SD', 'HD', 'UHD'] print("Premium User Ads:", premium_user.has_ads()) # False
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!