Sobes.tech
Middle

Factory dizayn naqshi nima va u ob'ektlarni qurishda (Builder) qanday ishlatiladi?

sobes.tech AI

AIdan javob

Factory Method naqshoni, asosiy sinfda obyektlarni yaratish uchun interfeys taqdim etadi va subklasslarga yaratilayotgan obyektlarning turini o'zgartirish imkonini beradi. ConcreteFactory qaysi ConcreteProduct ni yaratishni hal qiladi.

Builder murakkab obyektni uning tasviridan ajratadi. U obyektni bosqichma-bosqich yaratishga imkon beradi, uning xususiyatlarini belgilash uchun turli usullarni taqdim etadi va tayyor obyektni qaytaradi. Bu, obyektning ko'p miqdordagi ixtiyoriy parametrlari bo'lsa va uning yaratish jarayoni murakkab bo'lsa, qo'llaniladi.

Fabrika obyektlarni to'liq yaratadi, Builder esa ularni qism-qism bilan yaratadi.

Misol:

// Factory Method
interface Dialog {
    fun createButton(): Button
    fun render() {
        val okButton = createButton()
        okButton.render()
    }
}

class WindowsDialog : Dialog {
    override fun createButton(): Button {
        return WindowsButton()
    }
}

class WebDialog : Dialog {
    override fun createButton(): Button {
        return HTMLButton()
    }
}

interface Button {
    fun render()
    fun onClick()
}

class WindowsButton : Button {
    override fun render() {
        println("Windows tugmasi render qilinmoqda")
    }

    override fun onClick() {
        println("Windows tugmasiga bosildi")
    }
}

class HTMLButton : Button {
    override fun render() {
        println("HTML tugmasi render qilinmoqda")
    }

    override fun onClick() {
        println("HTML tugmasiga bosildi")
    }
}

// Builder
class Pizza private constructor(
    private val size: String,
    private val cheese: Boolean,
    private val pepperoni: Boolean,
    private val mushrooms: Boolean
) {
    data class Builder(
        var size: String = "medium",
        var cheese: Boolean = false,
        var pepperoni: Boolean = false,
        var mushrooms: Boolean = false
    ) {
        fun size(size: String) = apply { this.size = size }
        fun cheese(cheese: Boolean) = apply { this.cheese = cheese }
        fun pepperoni(pepperoni: Boolean) = apply { this.pepperoni = pepperoni }
        fun mushrooms(mushrooms: Boolean) = apply { this.mushrooms = mushrooms }
        fun build() = Pizza(size, cheese, pepperoni, mushrooms)
    }

    override fun toString(): String {
        return "Pizza(size='$size', cheese=$cheese, pepperoni=$pepperoni, mushrooms=$mushrooms)"
    }
}

// Builderdan foydalanish
val pizza = Pizza.Builder()
    .size("large")
    .cheese(true)
    .pepperoni(true)
    .build()

println(pizza)

Taqqoslash:

Xususiyat Factory Method Builder
Ma'no Subklasslarda interfeyslar orqali obyektlar yaratish. Murakkab obyektlarni bosqichma-bosqich yaratish.
Obyektning murakkabligi Odatda oddiy obyektlar. Ko'p parametrli murakkab obyektlar.
Yaratishdagi moslashuvchanlik Subklassga bog'liq obyekt turini tanlash. Ob'ekt xususiyatlarini bosqichma-bosqich sozlash.
Obyektni qaytarish Tayyor obyektni qaytaradi. Yaratish tugagach obyektni qaytaradi.
Qo'llanilishi Frameworklar, kutubxonalar, obyekt turi kompilatsiya vaqtida noma'lum bo'lsa. Ko'p ixtiyoriy parametrli obyektlar.