Middle
136
Құрылысшы (Builder) жобалау үлгісі дегеніміз не?
AI-дан жауап
sobes.tech AI
"Құрылысшы" (Builder) үлгісі — бұл құрастырудың құрылымдық үлгісі, ол күрделі объектіні кезең-кезеңімен құруға мүмкіндік береді, әртүрлі көріністер мен құрастыру нұсқаларын ұсынады. Ол күрделі объектіні құрастыру процесін оның көрінісінен бөледі.
Негізгі компоненттері:
- Builder: интерфейс немесе абстрактілі класс, өнімнің бөліктерін құру қадамдарын анықтайды.
- ConcreteBuilder: нақты Builder жүзеге асырушы, ол құрастыру қадамдарын орындайды және дайын өнімді алуға әдіс ұсынады. Ол құрастырылатын Product объектісіне сілтеме сақтайды.
- Product: құрастырылатын күрделі объект.
- Director: (әрқашан міндетті емес) құрастыру қадамдарының тәртібін анықтайды. Ол Builder көмегімен нақты объектіні құру процесін басқаруы мүмкін.
Артықшылықтары:
- Күрделі объектілерді кезең-кезеңімен құруға мүмкіндік береді, бұл кодты жеңілдетеді және оны оқуға ыңғайлы етеді.
- Бірдей құрастыру процесінің әртүрлі көріністерін алуға мүмкіндік береді.
- Құрастыру кодын объектінің пәндік логикасынан оқшаулайды.
Мысал:
# Өнім
class House:
def __init__(self):
self.walls = 0
self.windows = 0
self.doors = 0
self.roof = False
def __str__(self):
return f"Үй {self.walls} қабырғамен, {self.windows} тереземен, {self.doors} есіспен және төбемен: {self.roof}"
# Құрылысшы интерфейсі
class HouseBuilder:
def reset(self):
pass
def build_walls(self, count):
pass
def build_windows(self, count):
pass
def build_doors(self, count):
pass
def build_roof(self):
pass
def get_result(self):
pass
# Нақты құрылысшы
class StoneHouseBuilder(HouseBuilder):
def __init__(self):
self._house = House()
def reset(self):
self._house = House()
def build_walls(self, count):
self._house.walls = count
def build_windows(self, count):
self._house.windows = count
def build_doors(self, count):
self._house.doors = count
def build_roof(self):
self._house.roof = True
def get_result(self):
return self._house
# Директор (міндетті емес)
class Director:
def construct_simple_house(self, builder):
builder.reset()
builder.build_walls(4)
builder.build_windows(2)
builder.build_doors(1)
builder.build_roof()
# Қолдану
builder = StoneHouseBuilder()
director = Director()
director.construct_simple_house(builder)
simple_house = builder.get_result()
print(simple_house)
# Басқа тәсілмен үй салу, директорсыз
builder.reset()
builder.build_walls(6)
builder.build_windows(4)
builder.build_doors(2)
complex_house = builder.get_result()
print(complex_house)