ホームページ >バックエンド開発 >Python チュートリアル >戦略設計パターン
戦略設計パターンは、実行時のアルゴリズムの動作の選択を可能にする動作設計パターンです。
単一のクラスでアルゴリズムの複数のバリエーションを実装するの代わりに、アルゴリズムのファミリーを定義し、それぞれを独自のクラスにカプセル化し、それらを交換可能にすることができます。
Context クラス: Strategy オブジェクトへの参照を維持し、共通のインターフェイスを通じてオブジェクトと対話します。
戦略インターフェイス: すべての具体的な戦略に共通のインターフェイスを定義します。
具体的な戦略: 特定のアルゴリズムを使用して戦略インターフェイスを実装します。
柔軟性と保守性の利点が複数の戦略クラスを管理するオーバーヘッドを上回る場合は、戦略パターンを使用します。
多くのアルゴリズム:
実行時の決定:
if または switch ステートメントの過度の使用を避ける:
バリエーションのカプセル化:
オープン/クローズの原則:
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
以上が戦略設計パターンの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。