Sobes.tech
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)

Артықшылықтары:

  • Құрастырушы кодын клиенттік кодтан оқшаулайды.
  • Өнімнің ішкі көрінісін өзгертуге мүмкіндік береді, клиенттік кодты өзгерту қажет емес.
  • Қадам-қадам объектіні құруды қамтамасыз етеді.
  • Көп параметрлермен объектілерді құруды жеңілдетеді.

Кемшіліктері:

  • Класс/интерфейс санының артуына әкеледі.
  • Қарапайым объектілер үшін артық болуы мүмкін.