πŸ”€ ΠŸΠ°Ρ‚Ρ‚Π΅Ρ€Π½ стратСгия Π² Swift



ΠŸΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΈΠ» ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ ΡΡ‚Π°Ρ‚ΡŒΠΈ ΠΏΡ€ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Π° стратСгия.



Π’ ΠΎΠ±Ρ‰ΠΈΡ… Ρ‡Π΅Ρ€Ρ‚Π°Ρ… #strategy #pattern – шаблон ΠΈΠ· Π³Ρ€ΡƒΠΏΠΏΡ‹ повСдСнчСских ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½ΠΎΠ² проСктирования, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ опрСдСляСт сСмСйство схоТих Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ², ΠΏΠΎΠΌΠ΅Ρ‰Π°Π΅Ρ‚ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· Π½ΠΈΡ… Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ класс ΠΈ позволяСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… Π²ΠΎ врСмя выполнСния прилоТСния (Π² runtime).



ΠšΠΎΡ€ΠΎΡ‡Π΅ говоря: инкапсуляция Π² классы, ΠΏΠ΅Ρ€Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² runtime.



Π‘Ρ†Π΅Π½Π°Ρ€ΠΈΠΈ использования



1. Π Π°Π·Π½Ρ‹Π΅ способы Π΄Π΅Ρ‚Π°Ρ‚ΡŒ ΠΎΠ΄Π½ΠΎ ΠΈ Ρ‚ΠΎ ΠΆΠ΅;

2. ΠΠ»ΡŒΡ‚Π΅Ρ€Π°Π½Ρ‚ΠΈΠ²Π° наслСдованию;

3. ΠΠ»ΡŒΡ‚Π΅Ρ€Π°Π½Ρ‚ΠΈΠ²Π° Π²Π΅Ρ‚Π²Π»Π΅Π½ΠΈΡŽ Π»ΠΎΠ³ΠΈΠΊΠΈ: if/else



ΠŸΡ€ΠΈΠΌΠ΅Ρ€

Π₯ΠΎΡ‚ΠΈΠΌ ΠΏΠ΅Ρ‡Π°Ρ‚Π°Ρ‚ΡŒ Π»ΠΎΠ³ΠΈ, ΠΏΡ€ΠΈ этом Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π°Π·Π½Ρ‹Π΅ стили: Π² Π²Π΅Ρ€Ρ…Π½Π΅ΠΌ рСгистрС, Π½ΠΈΠΆΠ½Π΅ΠΌ ΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ особоС Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ошибок.



ΠŸΡ€ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Π° стратСгия Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ нСсколько сущностСй:



What

ΠŸΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ опрСдСляСт ΠΆΠ΅Π»Π°Π΅ΠΌΠΎΠ΅ дСйствиС, Π² нашСм случаС ΠΏΠΈΡΠ°Ρ‚ΡŒ Π»ΠΎΠ³.

protocol LoggerStrategy {

func log(_ message: String)

}




Who

ΠžΠ±ΡŠΠ΅ΠΊΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ содСрТит ΡΡ‚Ρ€Π°Ρ‚Π΅Π³ΠΈΡŽ ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ Π΅Ρ‘ ΠΈΡΠΏΠΎΠ»Π·ΠΎΠ²Π°Ρ‚ΡŒ.

struct Logger {

let strategy: LoggerStrategy



func log(_ message: String) {

strategy.log(message)

}

}




How

ΠšΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Π°Ρ рСализация стратСгии, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ΅ дСйствиС.

struct CapitalizedStrategy: LoggerStrategy {

func log(_ message: String) {

print(message.capitalized)

}

}




ΠŸΡ€ΠΈΠΌΠ΅Ρ€ использования:

var logger = Logger(strategy: CapitalizedStrategy())

logger.log("my first strategy") // My First Strategy




Π’ ΡΡ‚Π°Ρ‚ΡŒΠ΅ Ρ‚Π°ΠΊΠΆΠ΅ прСдставлСны Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ Ρ„ΠΎΡ€ΠΌΠ° Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΠΈ, настройка ячССк ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅.



https://medium.com/flawless-app-stories/strategy-pattern-in-swift-1462dbddd9fe