Skip to content
wel.org.ua
wel.org.ua

  • Новини
  • Криптовалюта
  • Додатки
  • iT
  • Штучний інтелект
  • Статті
wel.org.ua

golang

[:ru]Golang: Реализовываем на Го шаблон проектирования Строитель (Builder)[:]

Наталія Кравець, 16.04.202428.06.2025
[:ru]

Итак шаблон проектирования Строитель (Builder) отделяет конструирование сложного объекта от его представления, так что в результате одного и того же процесса конструирования могут получаться разные представления.

The intention is to abstract steps of construction of objects so that
different implementations of these steps can construct different representations
of objects.

Рассмотреть вопрос о создании лабиринтов для фантазии игры. Будем делать так же как и в прошлый раз с Абстрактной фабрикой.

Лабиринты являются сложными структуры объекта. Лабиринты состоять из карт сайтов, как дверей, стен и комнат. Сайты картографических бывают различных типов, таких как стандарт, зачарованный или бомбили. Процесс создания лабиринтов должен быть независимым от типа сайтов карте и не нужно менять, когда новые виды дверей, стен и комнат добавляются.

Раствор представляет собой интерфейс строитель определении методов для создания частей конечного продукта. Бетонные строители реализуют интерфейс строитель; построить и собрать части; сохранить ссылку на конечный продукт они создают; и обеспечивают средства для извлечения конечного продукта. Директор построить объект с помощью интерфейса строитель.

В дальнейшем мы покажем, как лабиринт со стандартными сайтами карте можно создать с помощью строителя.
Интерфейс MazeBuilder является общий интерфейс строитель конкретные строители реализации. Метод GetMaze обеспечивает доступ к конечному продукту создает застройщик и есть построить метод для каждой части.

type MazeBuilder interface {
GetMaze() *Maze
BuildMaze()
BuildRoom(roomId int)
BuildDoor(roomId, room2 int)
}

Это перечисление показывает декларацию StandardMazeBuilder которые
имеет ссылку на объект Maze (конечного продукта). GetMaze обеспечивает
доступ общественности к конечному продукту.

type StandardMazeBuilder struct {
maze *Maze
}
func (builder *StandardMazeBuilder) GetMaze() *Maze {
return builder.maze
}

BuildMaze, BuildRoom и BuildDoor каждый создать карту сайта в стандартный сорт. BuildMaze инициализирует конечный продукт с новым объектом лабиринт. BuildRoom создает новый номер, если номер не существует. Комната получает четыре стандартные стены. BuildDoor извлекает номера, что дверь для подключения. Новый стандарт дверь вставляется в каждый room.1 Обратите внимание, что каждая функция сборки работает на том же объекте лабиринт. Каждый шаг сборки вносит свой вклад в создание целого конечного продукта.

func (builder *StandardMazeBuilder) BuildMaze() {
builder.maze = NewMaze()
}
func (builder *StandardMazeBuilder) BuildRoom(roomId int) {
if builder.maze.GetRoom(roomId) == nil {
room := NewStandardRoom(roomId)
builder.maze.AddRoom(room)
room.SetSide(North, new(StandardWall))
room.SetSide(East, new(StandardWall))
room.SetSide(South, new(StandardWall))
room.SetSide(West, new(StandardWall))
}
}
func (builder *StandardMazeBuilder) BuildDoor(roomId1 int, roomId2 int) {
room1 := builder.maze.GetRoom(roomId1)
room2 := builder.maze.GetRoom(roomId2)
door := NewStandardDoor(room1, room2)
room1.SetSide(West, door)
room2.SetSide(East, door)
}

BuildMaze использует объект MazeBuilder создать лабиринт. Типы Карта сайта лабиринта зависит от динамического типа объекта застройщика. Метод принимает объект типа MazeBuilder и называет строителя Построить методы. Каждый шаг BuildMaze добавляет часть к конечному продукту
которой объект застройщик отслеживает прочь.

func BuildMaze (builder MazeBuilder) *Maze {
builder.BuildMaze()
builder.BuildRoom(1)
builder.BuildRoom(2)
builder.BuildDoor(1, 2)
return builder.GetMaze()
}

Приведенный ниже код показывает, как клиенты используют строителя, чтобы создать лабиринт со стандартными сайтами карте. Строитель получает экземпляр; объект строитель передается BuildMaze, что создает методы построения лабиринт вызывающего строителя; лабиринт присваивается лабиринт строителя созданный; и, наконец, структура лабиринта печатается на консоль.

builder:= NewStandardMazeBuilder()
BuildMaze(builder)
maze := builder.GetMaze()
fmt.Print(maze)

Шаблоны описывает особый тип директору с методом Construct. Это реализация Builder опускает отдельный тип директора. Задача директора является «построить объект, используя интерфейс Builder». В ГО, это отдельный тип директор не надо. Директора не хранить состояние продукта, ни строителем, которую они используют, чтобы создать продукт. Директор является лишь сосуд для методов построить. Метод режиссера Construct может быть функцией делая вид директор лишнего.
Тем не менее, одним из видов директора могут быть использованы для группирования различных методов строить вместе.

Если общая функциональность между строителями идентифицируется, тип строитель по умолчанию должны быть реализованы. Строитель по умолчанию может также поддерживать ссылку на продукт он создает. Бетонные строители лабиринта бы встроить строитель по умолчанию, чтобы получить общую функциональность и ссылку на продукт.

[:]
Новини [:ru]Игры[:][:ru]Програмирование[:]

Навигация по записям

Previous post
Next post

Related Posts

Новини Китай вложил $47 млрд в фонд для поддержки производства микрочипов

Китай вложил $47 млрд в фонд для поддержки производства микрочипов

28.05.202428.06.2025

В Китае создали финансовый механизм с общим капиталом в размере 47,5 миллиарда долларов, который направлен на поддержку отечественного производства полупроводников.

Read More
Новини BRAS на FreeBSD

[:ru]BRAS на FreeBSD 7.2-RELEASE-p4 + freeNIBS[:]

16.04.202428.06.2025

[:ru] Мой Брас слушает 10.2.5.2 и 10.2.6.1 /usr/local/etc/mpd5/mpd.conf dmesg /etc/sysctl.conf скрипт подключения пользователя Вот скрипт который Я использовал, при подключении пользователя.Он создаёт pipe, если для пользователя стоит ограничение скорости `bw1`, `bw2` в таблице `all` больше нуля.Если ИП реальный: У Меня начинается с 91. в примере, то он не натиться, иначе…

Read More
Новини Интегрированная графика Intel приблизилась к производительности RTX 3050

Интегрированная графика Intel приблизилась к производительности RTX 3050

27.06.202428.06.2025

Портал Videocardz, ссылаясь на Jaykihn, опубликовал результаты тестирования встроенной графики мобильных процессоров Intel Core Ultra 200V Lunar Lake в бенчмарках 3DMark TimeSpy и других синтетических тестах. Соответствующую информацию передает gsminfo.com.ua. Информация о конкретной модели iGPU не предоставлена, но предположительно это ARC A140V с 8 ядрами Xe2, в паре с 16…

Read More

Последние записи

  • У бета-версії iOS 27 Siri навчилася говорити швидше, повільніше та виразніше
  • Google випустила Gemini Spark для macOS
  • SpaceX працює над власним ШІ-пристроєм: чи так це насправді
  • Топ бюджетних смартфонів 2026: моделі, ціни, характеристики
  • Україна представить три дисципліни без кваліфікації на Esports Nations Cup 2026

Последние коментарии

Нет комментариев для просмотра.

Категории

  • iT
  • Авто
  • Додатки
  • Ігри та кіно
  • Криптовалюта
  • Наука та космос
  • Новини
  • Пристрої
  • Статті
  • Штучний інтелект
©2026 wel.org.ua | WordPress Theme by SuperbThemes