Sobes.tech
Junior

'Strateji' naqshi nima?

sobes.tech AI

AIdan javob

"Strateji" naqshli dizaynning xulq-atvor naqshlaridan biridir va algoritmlarning oilasini belgilash, har birini inkapsulyatsiya qilish va ularni almashtirish imkonini beradi. Bu, foydalanuvchilar tomonidan foydalanilayotgan algoritmni mustaqil ravishda o'zgartirish imkonini beradi.

Asosiy nuqtalar:

  • Kontekst: Bir algoritmni ishlatadigan sinf. U strategiya interfeysiga havola qiladi.
  • Strategiya Interfeysi: Barcha konkret strategiyalar uchun umumiy interfeysni belgilaydi. Kontekst bu interfeys bilan o'zaro ta'sir qiladi.
  • Konkret Strategiyalar: Strategiya interfeysini amalga oshiradi va algoritmning aniq implementatsiyasini taqdim etadi.

Afzalliklar:

  • Yangi strategiyalarni qo'shishni osonlashtiradi, kontekst sinfini o'zgartirmasdan.
  • Algoritmlarni alohida sinflarda izolyatsiya qiladi, bu kodni o'qilishi oson va qo'llab-quvvatlash uchun qulay qiladi.
  • Mijozga algoritmni bajarish vaqtida tanlash imkonini beradi.

iOSda foydalanish misoli:

Masalan, matn maydoniga kirishni tekshirish uchun turli usullarni yoki do'kon ilovasida chegirmalarni hisoblash uchun turli algoritmlarni amalga oshirish uchun strategiyadan foydalanish mumkin.

// Strategiya interfeysi
protocol ValidationStrategy {
    func isValid(_ input: String) -> Bool
}

// Konkret Strategiya: Email tekshiruvi
struct EmailValidationStrategy: ValidationStrategy {
    func isValid(_ input: String) -> Bool {
        // Email formatining eng oddiy tekshiruvi
        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'sh bo'lmagan satr tekshiruvi
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)
    }
}

// Foydalanish
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