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