Middle
Պատմեք «Կառուցող» նախագծման ձևի մասին։
sobes.tech AI
Պատասխան AI-ից
Դիզայնի նմուշը "Կառուցող" (Builder) — դա ստեղծող նմուշ է, որը թույլ է տալիս կառուցել բարդ օբյեկտներ քայլ առ քայլ: Այն առանձնացնում է բարդ օբյեկտի կառուցման գործընթացը նրա ներկայացումից, այնպես որ նույն կառուցման գործընթացը կարող է ստեղծել տարբեր ներկայացումներ:
Հիմնական բաղադրիչները՝
- Կառուցող (Builder)՝ ինտերֆեյս կամ ամփոփ դաս, որը սահմանում է մեթոդներ բարդ օբյեկտի մասերի ստեղծման համար:
- Կոնկրետ Կառուցող (Concrete Builder)՝ իրականացնում է Կառուցողի ինտերֆեյսը և տրամադրում կոնկրետ իրականացման մեթոդներ օբյեկտի մասերի կառուցման համար: Այն պահպանում է միջնորդական արդյունքը և տրամադրում մեթոդ պատրաստի օբյեկտը ստանալու համար:
- Ճարտարապետ (Director)՝ պարտադիր չէ բաղադրիչ: Կարգավորում է կառուցողի մեթոդների կանչերի հերթականությունը օբյեկտի ստեղծման համար: Չգիտի կոնկրետ կառուցողներին:
- Ապրանք (Product)՝ բարդ օբյեկտ, որը կառուցում է կառուցողը:
Կիրառում՝
- Երբ օբյեկտի ստեղծման գործընթացը բարդ է և ներառում է բազմաթիվ ընտրովի քայլեր:
- Երբ անհրաժեշտ է ստեղծել նույն օբյեկտի տարբեր ներկայացումներ՝ օգտագործելով նույն կառուցման գործընթացը:
- Երբ օբյեկտի կոնստրուկտորը ունի մեծ քանակությամբ պարամետրեր:
Go-ում օրինակ՝
// Ապրանք - բարդ օբյեկտ
type Product struct {
PartA string
PartB string
PartC string
}
// Կառուցող - ինտերֆեյս
type Builder interface {
BuildPartA()
BuildPartB()
BuildPartC()
GetProduct() *Product
}
// Կոնկրետ Կառուցող
type ConcreteBuilder struct {
product *Product
}
func NewConcreteBuilder() *ConcreteBuilder {
return &ConcreteBuilder{product: &Product{}}
}
func (cb *ConcreteBuilder) BuildPartA() {
cb.product.PartA = "Ա մաս կառուցված է"
}
func (cb *ConcreteBuilder) BuildPartB() {
cb.product.PartB = "Բ մաս կառուցված է"
}
func (cb *ConcreteBuilder) BuildPartC() {
cb.product.PartC = "Գ մաս կառուցված է"
}
func (cb *ConcreteBuilder) GetProduct() *Product {
return cb.product
}
// Ճարտարապետ - պարտադիր չէ)
type Director struct {
builder Builder
}
func NewDirector(builder Builder) *Director {
return &Director{builder: builder}
}
func (d *Director) Construct() {
d.builder.BuildPartA()
d.builder.BuildPartB()
d.builder.BuildPartC()
}
// Օգտագործում
// concreteBuilder := NewConcreteBuilder()
// director := NewDirector(concreteBuilder)
// director.Construct()
// product := concreteBuilder.GetProduct()
// fmt.Printf("Ստացված արտադրանքը: %+v\n", product)
Առավելություններ՝
- Կոդը կառուցման օբյեկտից առանձնացնում է հաճախորդի կոդից:
- Ինքնուրույն փոփոխում է արտադրանքի ներքին ներկայացումը՝ առանց հաճախորդի կոդը փոխելու:
- Կատարում է քայլ առ քայլ կառուցում:
- Պարզեցնում է մեծ քանակությամբ պարամետրերով օբյեկտների ստեղծումը:
Թերություններ՝
- Բարձրացնում է դասերի/ինտերֆեյսների քանակը օբյեկտ ստեղծելու համար:
- Կարող է ավելորդ լինել պարզ օբյեկտների համար:
hy-armenian: