Das Strategy Design Pattern ist ein verhaltensorientiertes Designmuster, das die Auswahl des Verhaltens eines Algorithmus zur Laufzeit ermöglicht.
Anstatt mehrere Variationen eines Algorithmus in einer einzigen Klasse zu implementieren, können Sie eine Familie von Algorithmen definieren, jeden in einer eigenen Klasse kapseln und sie austauschbar machen.
Kontextklasse: Verwaltet einen Verweis auf ein Strategieobjekt und interagiert mit diesem über eine gemeinsame Schnittstelle.
Strategieschnittstelle: Definiert eine gemeinsame Schnittstelle für alle konkreten Strategien.
Konkrete Strategien: Implementieren Sie die Strategieschnittstelle mit spezifischen Algorithmen.
Verwenden Sie das Strategiemuster, wenn die Vorteile von Flexibilität und Wartbarkeit den Aufwand für die Verwaltung mehrerer Strategieklassen überwiegen.
Viele Algorithmen:
Laufzeitentscheidungen:
Vermeiden Sie die übermäßige Verwendung von if- oder switch-Anweisungen:
Kapselung von Variationen:
Offen/Geschlossen-Prinzip:
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
Das obige ist der detaillierte Inhalt vonStrategieentwurfsmuster. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!