Sobes.tech
Middle

Ի՞նչ է Factory նախագծման ձևանմուշը և ինչպես է այն օգտագործվում օբյեկտների կառուցման (Builder) մեջ։

sobes.tech AI

Պատասխան AI-ից

Մոդելը Factory Method տրամադրում է ինտերֆեյս օբյեկտների ստեղծման համար հիմնական դասում, թույլ տալով ենթակլասներին փոխել ստեղծվող օբյեկտների տիպը: ConcreteFactory որոշում է, թե որ ConcreteProduct-ը ստեղծել:

Builder-ը բաժանում է բարդ օբյեկտի կառուցումը նրա ներկայացումից: Այն թույլ է տալիս կառուցել օբյեկտը քայլ առ քայլ, տրամադրելով տարբեր մեթոդներ նրա հատկությունները սահմանելու համար և վերադարձնելով պատրաստ օբյեկտը: Օգտագործվում է, երբ օբյեկտը ունի բազմաթիվ ընտրովի պարամետրեր և նրա ստեղծումը պահանջում է բարդ տրամաբանություն:

Ֆաբրիկան ամբողջական օբյեկտներ է ստեղծում, իսկ Tərtibçi-ն դրանք կառուցում է մասերի:

Օրինակ:

// 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 կոճակի ռենդեր")
    }

    override fun onClick() {
        println("Կոճակի վրա սեղմում Windows")
    }
}

class HTMLButton : Button {
    override fun render() {
        println("HTML կոճակի ռենդեր")
    }

    override fun onClick() {
        println("Կոճակի վրա սեղմում HTML")
    }
}

// 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 = "միջին",
        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)"
    }
}

// Builder-ի օգտագործում
val pizza = Pizza.Builder()
    .size("մեծ")
    .cheese(true)
    .pepperoni(true)
    .build()

println(pizza)

Համեմատություն:

Գծագրություն Factory Method Builder
Նպատակը Օբյեկտների ստեղծում ենթակլասների միջոցով. Կոմպլեքս օբյեկտների աստիճանաբար ստեղծում.
Օբյեկտի բարդություն Հաճախ պարզ օբյեկտներ. Բարդ օբյեկտներ բազմաթիվ պարամետրերով.
Ստեղծման ճկունություն Տիպի ընտրություն ենթակլասի վրա հիմնված. Օբյեկտի հատկությունների աստիճանային կարգավորում.
Օբյեկտի վերադարձ Գործնական օբյեկտ է վերադարձնում. Ստեղծումից հետո պատրաստ օբյեկտ է վերադարձնում.
Դիմում Ֆրեյմվորկներ, գրադարաններ, որտեղ օբյեկտի տիպը հայտնի չէ կոմպիլյացիայի ժամանակ. Օբյեկտներ շատ ընտրովի պարամետրերով.