Что такое паттерн Фабричный метод

Ответ

Фабричный метод — это порождающий паттерн, который определяет интерфейс для создания объектов, но делегирует выбор конкретного класса подклассам. Позволяет изменять тип создаваемых объектов без изменения клиентского кода.

Пример на Kotlin:

interface Transport {
    fun deliver()
}

class Truck : Transport {
    override fun deliver() = println("Delivered by truck")
}

class Ship : Transport {
    override fun deliver() = println("Delivered by ship")
}

abstract class Logistics {
    abstract fun createTransport(): Transport

    fun planDelivery() {
        val transport = createTransport()
        transport.deliver()
    }
}

class RoadLogistics : Logistics() {
    override fun createTransport() = Truck()
}

class SeaLogistics : Logistics() {
    override fun createTransport() = Ship()
}

Использование:

val logistics: Logistics = RoadLogistics()
logistics.planDelivery() // Output: Delivered by truck

Преимущества: гибкость, расширяемость, соблюдение принципа открытости/закрытости.