Strategy bir-birini əvəz edən alqoritmlər ailəsini ümumi interfeys arxasında gizlədir. Müştəri (kontekst) strategiyanı saxlayır və işi ona həvalə edir, ona görə alqoritmi müştərini dəyişmədən seçmək və ya əvəz etmək olar. Bu, böyüyən if/elif zəncirinə obyektyönlü cavabdır.
Problem: if zənciri
Burada sifariş məbləği endirim növündən asılıdır. Hər yeni endirim total-ı dəyişir, kind-dakı səhv isə yalnız icra zamanı üzə çıxır. Funksiya bütün alqoritmləri bilir, ona görə açıq/qapalı prinsipi pozulur.
def total(items, kind, value=0):
amount = sum(items)
if kind == "none":
return amount
elif kind == "percent":
return amount * (100 - value) // 100
elif kind == "fixed":
return max(amount - value, 0)
raise ValueError(kind)
print(total([40, 60, 50], "percent", 10), total([40, 60, 50], "fixed", 30))135 120Strategiyalar sinif kimi
Order Discount strategiyasını saxlayır; üç sinif onu həyata keçirir