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.

python
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))
text
135 120

Strategiyalar sinif kimi

`Order` `Discount` strategiyasını saxlayır; üç sinif onu həyata keçirir
Order Discount strategiyasını saxlayır; üç sinif onu həyata keçirir