👫 Command Pattern
Tags: swift, programming, computerscience, architecture
Published: 2022-12-13 16:36:52


![Command Pattern](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/f2xllc5b747y0wj9bubg.png)

---

The command pattern is used to express a request, including the call to be made and all of its required parameters, in a command object. The command may then be executed immediately or held for later use.

Github https://github.com/sergeyleschev/design-patterns

**Example:**
```swift
protocol DoorCommand {
    func execute() -> String
}

final class OpenCommand: DoorCommand {
    let doors:String
    required init(doors: String) {
        self.doors = doors
    }
    func execute() -> String {
        return "Opened \(doors)"
    }
}

final class CloseCommand: DoorCommand {
    let doors:String

    required init(doors: String) {
        self.doors = doors
    }
    func execute() -> String {
        return "Closed \(doors)"
    }
}

final class HAL9000DoorsOperations {
    let openCommand: DoorCommand
    let closeCommand: DoorCommand
    
    init(doors: String) {
        self.openCommand = OpenCommand(doors:doors)
        self.closeCommand = CloseCommand(doors:doors)
    }

    func close() -> String {
        return closeCommand.execute()
    }
    
    func open() -> String {
        return openCommand.execute()
    }
}
```
Usage:
```swift
let podBayDoors = "Pod Bay Doors"
let doorModule = HAL9000DoorsOperations(doors:podBayDoors)

doorModule.open()
doorModule.close()
```
Sources: [Github](https://github.com/sergeyleschev/design-patterns/tree/main/Command)

> **_Behavioral_**
In software engineering, behavioral design patterns are design patterns that identify common communication patterns between objects and realize these patterns. By doing so, these patterns increase flexibility in carrying out this communication.
Source: [wikipedia.org](https://en.wikipedia.org/wiki/Behavioral_pattern)

---

🐝 [Chain Of Responsibility](https://dev.to/sergeyleschev/swift-design-patterns-chain-of-responsibility-4bbd)
👫 [Command Pattern](https://dev.to/sergeyleschev/swift-design-patterns-command-pattern-3044)
🎶 [Interpreter Pattern](https://dev.to/sergeyleschev/swift-design-patterns-interpreter-pattern-390a)
🍫 [Iterator Pattern](https://dev.to/sergeyleschev/swift-design-patterns-iterator-pattern-405o)
💐 [Mediator Pattern](https://dev.to/sergeyleschev/swift-design-patterns-mediator-pattern-4299)
💾 [Memento Pattern](https://dev.to/sergeyleschev/swift-design-patterns-memento-pattern-chp)
👓 [Observer Pattern](https://dev.to/sergeyleschev/swift-design-patterns-observer-pattern-44fc)
🐉 [State Pattern](https://dev.to/sergeyleschev/swift-design-patterns-state-pattern-5ej4)
💡 [Strategy Pattern](https://dev.to/sergeyleschev/swift-design-patterns-strategy-pattern-143c)
📝 [Template Method](https://dev.to/sergeyleschev/swift-design-patterns-template-method-1c2o)
🏃 [Visitor Pattern](https://dev.to/sergeyleschev/swift-design-patterns-visitor-pattern-4hl5)
🌰 [Abstract Factory](https://dev.to/sergeyleschev/swift-design-patterns-abstract-factory-3ppa)
👷 [Builder Pattern](https://dev.to/sergeyleschev/swift-design-patterns-builder-pattern-3609)
🏭 [Factory Method](https://dev.to/sergeyleschev/swift-design-patterns-factory-method-5c6e)
🔂 [Monostate Pattern](https://dev.to/sergeyleschev/swift-design-patterns-monostate-pattern-574i)
🃏 [Prototype Pattern](https://dev.to/sergeyleschev/swift-design-patterns-prototype-pattern-n25)
💍 [Singleton](https://dev.to/sergeyleschev/swift-design-patterns-singleton-3c8b)
🔌 [Adapter Pattern](https://dev.to/sergeyleschev/swift-design-patterns-adapter-pattern-1040)
🌉 [Bridge Pattern](https://dev.to/sergeyleschev/swift-design-patterns-bridge-pattern-1ee2)
🌿 [Composite Pattern](https://dev.to/sergeyleschev/swift-design-patterns-composite-pattern-1koj)
🍧 [Decorator Pattern](https://dev.to/sergeyleschev/swift-design-patterns-decorator-pattern-2c6p)
🎁 [Facade Pattern](https://dev.to/sergeyleschev/swift-design-patterns-facade-pattern-130a)
🍃 [Flyweight Pattern](https://dev.to/sergeyleschev/swift-design-patterns-flyweight-pattern-6ko)
☔ [Protection Proxy](https://dev.to/sergeyleschev/swift-design-patterns-protection-proxy-3kpc)
🍬 [Virtual Proxy](https://dev.to/sergeyleschev/swift-design-patterns-virtual-proxy-2bbg)

---

**Contacts**
I have a clear focus on time-to-market and don't prioritize technical debt. And I took part in the Pre-Sale/RFX activity as a System Architect, assessment efforts for Mobile (iOS-Swift, Android-Kotlin), Frontend (React-TypeScript) and Backend (NodeJS-.NET-PHP-Kafka-SQL-NoSQL). And I also formed the work of Pre-Sale as a CTO from Opportunity to Proposal via knowledge transfer to Successful Delivery.

🛩️ #startups #management #cto #swift #typescript #database
📧 Email: sergey.leschev@gmail.com
👋 LinkedIn: https://linkedin.com/in/sergeyleschev/
👋 LeetCode: https://leetcode.com/sergeyleschev/
👋 Twitter: https://twitter.com/sergeyleschev
👋 Github: https://github.com/sergeyleschev
🌎 Website: https://sergeyleschev.github.io
🌎 Reddit: https://reddit.com/user/sergeyleschev
🌎 Quora: https://quora.com/sergey-leschev
🌎 Medium: https://medium.com/@sergeyleschev
🖨️ PDF Design Patterns: [Download](https://sergeyleschev.github.io/sergeyleschev-design-patterns.pdf)