전략 디자인 패턴은 런타임에 알고리즘의 동작을 선택할 수 있는 동작 디자인 패턴입니다.
단일 클래스에서 알고리즘의 여러 변형을 구현하는 대신 알고리즘 계열을 정의하고 각각을 자체 클래스에 캡슐화하고 상호 교환 가능하게 만들 수 있습니다.
컨텍스트 클래스: 전략 개체에 대한 참조를 유지하고 공통 인터페이스를 통해 상호 작용합니다.
전략 인터페이스: 모든 구체적인 전략에 대한 공통 인터페이스를 정의합니다.
구체적인 전략: 특정 알고리즘으로 전략 인터페이스를 구현합니다.
여러 전략 클래스를 관리하는 오버헤드보다 유연성과 유지 관리 용이성의 이점이 더 클 경우 전략 패턴을 사용하세요.
다양한 알고리즘:
런타임 결정:
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!