Community chat: https://t.me/hamster_kombat_chat_2
Twitter: x.com/hamster_kombat
YouTube: https://www.youtube.com/@HamsterKombat_Official
Bot: https://t.me/hamster_kombat_bot
Game: https://t.me/hamster_kombat_bot/
Last updated 2 months, 2 weeks ago
Your easy, fun crypto trading app for buying and trading any crypto on the market
Last updated 2 months, 1 week ago
Turn your endless taps into a financial tool.
Join @tapswap_bot
Collaboration - @taping_Guru
Last updated 2 weeks, 5 days ago
? Что такое паттерн Command (Команда)?
? Спрашивают в 3% собеседований
Паттерн Command (Команда) — это поведенческий шаблон проектирования, который превращает запросы в объекты, позволяя передавать их как аргументы методов, ставить в очередь, логировать и отменять.
? Почему этот паттерн важен?
1️⃣ Инкапсуляция запросов: Превращает запросы в отдельные объекты.
2️⃣ Разделение ответственности: Изолирует отправителя запроса от исполнителя.
3️⃣ Логирование и отмена: Упрощает реализацию таких функций.
4️⃣ Параметризация: Позволяет передавать команды в виде параметров.
? Как это работает?
Паттерн состоит из следующих компонентов:
- Команда (Command): Интерфейс с методом execute.
- Конкретная команда (ConcreteCommand): Реализует команду для конкретного запроса.
- Получатель (Receiver): Объект, который выполняет действия.
- Отправитель (Invoker): Инициирует выполнение команды.
- Клиент (Client): Создаёт команды и связывает их с получателями.
```
// Протокол команды
protocol Command {
func execute()
}
// Получатель
class Light {
func on() {
print("Свет включен")
}
func off() {
print("Свет выключен")
}
}
// Конкретная команда для включения света
class LightOnCommand: Command {
private var light: Light
init(light: Light) {
self.light = light
}
func execute() {
light.on()
}
}
// Конкретная команда для выключения света
class LightOffCommand: Command {
private var light: Light
init(light: Light) {
self.light = light
}
func execute() {
light.off()
}
}
// Отправитель
class RemoteControl {
private var commands = String: Command
func setCommand(button: String, command: Command) {
commands[button] = command
}
func pressButton(button: String) {
commands[button]?.execute() ?? print("Команда не назначена")
}
}
// Клиентский код
let light = Light()
let lightOnCommand = LightOnCommand(light: light)
let lightOffCommand = LightOffCommand(light: light)
let remoteControl = RemoteControl()
remoteControl.setCommand(button: "ON", command: lightOnCommand)
remoteControl.setCommand(button: "OFF", command: lightOffCommand)
remoteControl.pressButton(button: "ON") // Свет включен
remoteControl.pressButton(button: "OFF") // Свет выключен
```
? Преимущества:
1️⃣ Инкапсуляция действий: Упрощает управление действиями.
2️⃣ Поддержка отмены и логирования: Легко добавить эти функции.
3️⃣ Гибкость и расширяемость: Легко добавлять новые команды.
4️⃣ Разделение ответственности: Уменьшает зависимость между компонентами.
? Недостатки:
1️⃣ Усложнение кода: Добавление команд может усложнить проект.
2️⃣ Ресурсоёмкость: Дополнительные объекты команд требуют ресурсов.
? Когда применять?
- Когда нужно параметризовать объекты выполняемыми действиями.
- Когда требуется логирование, отмена и повтор запросов.
- Когда нужно передавать операции в очереди или как аргументы.
- Когда нужно разделить ответственность между отправителем и исполнителем.
Паттерн Command — мощный инструмент для управления действиями и инкапсуляции логики, обеспечивая гибкость и расширяемость системы.
Паттерн проектирования "Строитель" в iOS
? Спросят с вероятностью 3%
? Что такое паттерн "Строитель"?
Паттерн "Строитель" (Builder) позволяет пошагово создавать сложные объекты. В отличие от других паттернов, которые создают объекты за один шаг, "Строитель" разделяет процесс создания на этапы, давая возможность гибко настраивать процесс построения объекта.
Преимущества:
- Гибкость ?: Позволяет создавать различные представления одного и того же объекта.
- Читабельность ?: Разделяет процесс создания на логические шаги, улучшая читаемость кода.
- Независимость ?: Процесс создания объекта независим от его составляющих частей.
Недостатки:
- Сложность ?: Увеличивает сложность кода из-за введения дополнительных классов.
- Многословность ?: Требует написания большего количества кода для реализации всех шагов создания.
Пример использования на Swift
Представим, что мы создаём приложение для заказа пиццы ?. Мы можем использовать паттерн "Строитель" для пошаговой сборки заказа.
```
// Продукт
class Pizza {
var dough: String = ""
var sauce: String = ""
var topping: String = ""
}
// Абстрактный строитель
protocol PizzaBuilder {
func setDough()
func setSauce()
func setTopping()
func getPizza() -> Pizza
}
// Конкретный строитель
class MargheritaPizzaBuilder: PizzaBuilder {
private var pizza = Pizza()
func setDough() {
pizza.dough = "Thin Crust"
}
func setSauce() {
pizza.sauce = "Tomato Basil"
}
func setTopping() {
pizza.topping = "Mozzarella Cheese"
}
func getPizza() \-> Pizza {
return pizza
}
}
// Директор
class Director {
private var builder: PizzaBuilder?
func setBuilder(builder: PizzaBuilder) {
self.builder = builder
}
func constructPizza() {
builder?.setDough()
builder?.setSauce()
builder?.setTopping()
}
func getPizza() \-> Pizza? {
return builder?.getPizza()
}
}
// Использование
let director = Director()
let margheritaBuilder = MargheritaPizzaBuilder()
director.setBuilder(builder: margheritaBuilder)
director.constructPizza()
if let pizza = director.getPizza() {
print("Dough: (pizza.dough), Sauce: (pizza.sauce), Topping: (pizza.topping)")
}
```
Ключевые моменты:
1️⃣ Продукт ?* - объект, который мы создаём (в данном случае, пицца).
2️⃣ *Строитель ?* - интерфейс, определяющий шаги для создания продукта.
3️⃣ *Конкретный строитель ??* - класс, реализующий шаги для создания конкретного типа продукта.
4️⃣ *Директор ?**** - управляет процессом создания продукта, используя строителя.
Использование паттерна "Строитель" позволяет гибко и понятно управлять созданием сложных объектов, разделяя процесс на логические шаги и улучшая читаемость и поддержку кода.
5/14/2024 job openings:
- Canada, Fullstack .Net developer (Azure/React) Apply
- UK, Lead iOS Developer Apply
- US, iOS Developer Apply
- US, iOS Developer Apply
- US, iOS Software Engineer Apply
- US, Mobile Engineer (iOS and Android) with CI/CD experience Apply
- US, Mobile Application Developer Apply
- US, Full- Stack AEM Engineer Apply
- US, Android Quality Engineer Apply
- US, Full Stack Engineer Apply
- US, SAP ABAP - Fiori Full Stack Developer (15839) Apply
- US, iOS Staff Engineer (contract-to-hire) Apply
- Ukraine, iOS Developer for Utility and Gaming Apps (Flexible Tech Stack) Apply
- Ukraine, Full Stack Engineer Apply
Resonaite hiring Fullstack .Net developer (Azure/React) in Canada | LinkedIn
Posted 6:22:04 PM. Our client in the professional services is looking for a contract Senior .Net Fullstack developer…See this and similar jobs on LinkedIn.
5/13/2024 job openings:
- US, Full Stack Engineer Apply
- UK, Part-Time Work From Home as Photo Collector Anywhere in Greece Apply
HireHeroes.ai hiring Full Stack Engineer in United States | LinkedIn
Posted 5:45:43 PM. Company Description HireHeroes.ai is the world's first digital recruiter designed to qualify…See this and similar jobs on LinkedIn.
- UK, Part-Time Work From Home as Photo Collector Anywhere in Portugal Apply
- Czechia, Full Stack Engineer Apply
- UK, Part-Time Work From Home as Photo Collector Anywhere in Greece Apply
- UK, Part-Time Work From Home as Photo Collector Anywhere in Greece Apply
- UK, Part-Time Work From Home as Photo Collector Anywhere in Greece Apply
- UK, Part-Time Work From Home as Photo Collector Anywhere in Greece Apply
- UK, Part-Time Work From Home as Photo Collector Anywhere in Greece Apply
- UK, Part-Time Work From Home as Photo Collector Anywhere in Greece Apply
- UK, Part-Time Work From Home as Photo Collector Anywhere in Greece Apply
- UK, Part-Time Work From Home as Photo Collector Anywhere in Greece Apply
- UK, Part-Time Work From Home as Photo Collector Anywhere in Greece Apply
- US, Sr. Full Stack Developer/ Lead Apply
- US, Mobile Developer (React Native) Apply
- US, Sr Full Stack Python Developer (W2, Gen AI) Apply
- US, Xamarin Mobile Developer Apply
- US, Senior Full Stack .NET Engineer / Hybrid in NJ / 6-12 Month Contract Apply
TransPerfect está contratando Part-Time Work From Home as Photo Collector Anywhere in Portugal em: Cascais, Lisbon, Portugal |…
Anunciada 22:18:12. Position: Data ContributorProject Location: Portugal (Remote)Engagement Model: Task Based DataForce… - veja esta vaga e outras semelhantes no LinkedIn.
- US, Full Stack Engineer Apply
- US, Tableau Full Stack Developer (16062) Apply
- US, Dotnet fullstack developer Apply
- US, Full Stack C# Developer - Support and Maintenance Apply
- US, Full Stack Engineer Apply
- US, Senior Full Stack Shopify Developer Apply
- US, Full Stack Engineer Apply
- US, Sr Quality Engineer - Android Apply
Community chat: https://t.me/hamster_kombat_chat_2
Twitter: x.com/hamster_kombat
YouTube: https://www.youtube.com/@HamsterKombat_Official
Bot: https://t.me/hamster_kombat_bot
Game: https://t.me/hamster_kombat_bot/
Last updated 2 months, 2 weeks ago
Your easy, fun crypto trading app for buying and trading any crypto on the market
Last updated 2 months, 1 week ago
Turn your endless taps into a financial tool.
Join @tapswap_bot
Collaboration - @taping_Guru
Last updated 2 weeks, 5 days ago