Sobes.tech
Junior

'Strateji' deseni nedir?

sobes.tech yapay zeka

AI'dan gelen yanıt

Tasarımda "Strateji" deseni, davranışsal tasarım desenlerinden biridir ve bir algoritma ailesini tanımlamaya, her birini kapsüllemeye ve bunları değiştirilebilir hale getirmeye olanak tanır. Kullanıcılar tarafından kullanılmakta olan algoritmadan bağımsız olarak algoritmayı değiştirmeyi sağlar.

Ana noktalar:

  • Bağlam: Bir algoritmayı kullanan sınıf. Strateji arayüzüne referans içerir.
  • Strateji Arayüzü: Tüm somut stratejiler için ortak bir arayüz tanımlar. Bağlam bu arayüzle etkileşime girer.
  • Somut Stratejiler: Strateji arayüzünü uygular ve algoritmanın somut bir uygulamasını sağlar.

Avantajlar:

  • Yeni stratejilerin kolayca eklenmesine olanak tanır, bağlam sınıfını değiştirmeden.
  • Algoritmaları ayrı sınıflarda izole eder, böylece kod daha okunabilir ve bakımı kolay olur.
  • Kullanıcının algoritma uygulamasını çalışma zamanında seçmesine izin verir.

iOS'ta kullanım örneği:

Örneğin, bir metin alanına giriş doğrulama yöntemlerini uygulamak veya mağaza uygulamasında indirim hesaplama algoritmalarını belirlemek için Strateji kullanılabilir.

// Strateji Arayüzü
protocol ValidationStrategy {
    func isValid(_ input: String) -> Bool
}

// Somut Strateji: E-posta doğrulama
struct EmailValidationStrategy: ValidationStrategy {
    func isValid(_ input: String) -> Bool {
        // En basit e-posta formatı kontrolü
        let emailRegex = "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,6}"
        let emailPredicate = NSPredicate(format:"SELF MATCHES %@", emailRegex)
        return emailPredicate.evaluate(with: input)
    }
}

// Somut Strateji: Boş olmayan dize doğrulama
struct NonEmptyValidationStrategy: ValidationStrategy {
    func isValid(_ input: String) -> Bool {
        return !input.isEmpty
    }
}

// Bağlam
class Validator {
    private var strategy: ValidationStrategy

    init(strategy: ValidationStrategy) {
        self.strategy = strategy
    }

    func setStrategy(_ strategy: ValidationStrategy) {
        self.strategy = strategy
    }

    func validate(_ input: String) -> Bool {
        return strategy.isValid(input)
    }
}

// Kullanım
let emailValidator = Validator(strategy: EmailValidationStrategy())
print(emailValidator.validate("test@example.com")) // true
print(emailValidator.validate("invalid-email")) // false

let nonEmptyValidator = Validator(strategy: NonEmptyValidationStrategy())
print(nonEmptyValidator.validate("Hello")) // true
print(nonEmptyValidator.validate("")) // false