Ответ
Фабричный метод — это порождающий паттерн, который определяет интерфейс для создания объектов, но делегирует выбор конкретного класса подклассам. Позволяет изменять тип создаваемых объектов без изменения клиентского кода.
Пример на 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
Преимущества: гибкость, расширяемость, соблюдение принципа открытости/закрытости.