Corak Reka Bentuk Strategi ialah corak reka bentuk gelagat yang membolehkan memilih gelagat algoritma pada masa jalan.
Daripada melaksanakan berbilang variasi algoritma dalam satu kelas, ia membolehkan anda menentukan keluarga algoritma, merangkum setiap satu dalam kelasnya sendiri dan menjadikannya boleh ditukar ganti.
Kelas Konteks: Mengekalkan rujukan kepada objek Strategi dan berinteraksi dengannya melalui antara muka biasa.
Antara Muka Strategi: Mentakrifkan antara muka biasa untuk semua strategi konkrit.
Strategi Konkrit: Laksanakan antara muka Strategi dengan algoritma tertentu.
Gunakan Corak Strategi apabila faedah fleksibiliti dan kebolehselenggaraan mengatasi overhed mengurus berbilang kelas strategi.
Banyak Algoritma:
Keputusan Masa Jalan:
Elakkan Penggunaan Berlebihan Pernyataan if atau switch:
Encapsulation of Variations:
Prinsip Terbuka/Tertutup:
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
Atas ialah kandungan terperinci Corak Reka Bentuk Strategi. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!