Junior
'Strateji' nümunəsi nədir?
sobes.tech Süni İntellekt
AI-dan cavab
"Strateji" nümunəsi dizaynın davranış nümunələrindən biridir və alqoritmlərin ailəsini müəyyən etməyə, hər birini inkapsulyasiya etməyə və onları dəyişdirilə bilən hala gətirməyə imkan verir. Bu, istifadəçilər tərəfindən istifadə olunan alqoritmi müstəqil şəkildə dəyişdirməyə imkan verir.
Əsas nöqtələr:
- Kontext: Bir alqoritmi istifadə edən sinf. Bu, strategiya interfeysinə istinad edir.
- Strategiya interfeysi: Bütün konkret strategiyalar üçün ümumi interfeys müəyyən edir. Kontekst bu interfeys ilə qarşılıqlı əlaqədədir.
- Konkret Strategiyalar: Strategiya interfeysini həyata keçirir və alqoritmin konkret tətbiqini təmin edir.
Üstünlüklər:
- Yeni strategiyaları asanlıqla əlavə etməyə imkan verir, kontekst sinfini dəyişmədən.
- Alqoritmləri ayrı sinflərdə izolyasiya edir, bu da kodu daha oxunaqlı və asan saxlanılan edir.
- Müştəriyə alqoritmin tətbiqini işləmə zamanı seçməyə imkan verir.
iOS-də istifadə nümunəsi:
Məsələn, müxtəlif giriş doğrulama üsullarını həyata keçirmək və ya mağaza tətbiqində endirim hesablamaları üçün müxtəlif alqoritmləri təyin etmək üçün strategiyadan istifadə edə bilərsiniz.
// Strategiya interfeysi
protocol ValidationStrategy {
func isValid(_ input: String) -> Bool
}
// Konkret Strategiya: E-poçt doğrulaması
struct EmailValidationStrategy: ValidationStrategy {
func isValid(_ input: String) -> Bool {
// Sadə e-poçt formatı yoxlaması
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)
}
}
// Konkret Strategiya: Boş olmayan sətir yoxlaması
struct NonEmptyValidationStrategy: ValidationStrategy {
func isValid(_ input: String) -> Bool {
return !input.isEmpty
}
}
// Kontekst
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)
}
}
// İstifadə
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