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 = "Бөлік B салынды"
}
func (cb *ConcreteBuilder) BuildPartC() {
cb.product.PartC = "Бөлік C салынды"
}
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)
Артықшылықтары:
- Құрастырушы кодын клиенттік кодтан оқшаулайды.
- Өнімнің ішкі көрінісін өзгертуге мүмкіндік береді, клиенттік кодты өзгерту қажет емес.
- Қадам-қадам объектіні құруды қамтамасыз етеді.
- Көп параметрлермен объектілерді құруды жеңілдетеді.
Кемшіліктері:
- Класс/интерфейс санының артуына әкеледі.
- Қарапайым объектілер үшін артық болуы мүмкін.