Пожалуйста, сначала прочитайте мой блог о встроенных полях в Golang здесь.

Что такое шаблон проектирования?

По материалам Wiki: в программной инженерии шаблон проектирования – это общее повторяемое решение часто возникающей проблемы при проектировании программного обеспечения. Шаблон проектирования — это не готовый дизайн, который можно преобразовать непосредственно в код. Это описание или шаблон решения проблемы, который можно использовать в самых разных ситуациях.

Шаблон команды:

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

Теперь вашему пульту не нужно знать, управляете ли вы Tesla или BMW. Когда пользователь нажмет кнопку запуска на пульте дистанционного управления, он запустит автомобиль в паре с пультом дистанционного управления.

Шаблон наблюдателя

Допустим, вы хотите построить систему, в которой есть N наблюдателей, которым нужно обновление всякий раз, когда происходит изменение состояния субъекта. И наблюдатели могут легко регистрироваться и отменять регистрацию в этом сервисе.

Для выполнения этой работы существует известный шаблон проектирования, в котором субъект может иметь отношение HAS-A со списком наблюдателей и иметь такие функции, как register и notifyObservers. Теперь каждый наблюдатель наследует интерфейс Observer и затем может зарегистрироваться или отменить регистрацию, вызвав функцию класса субъекта. И, чтобы уведомить всех наблюдателей, субъекту просто нужно вызвать notifyObserver, который будет перебирать весь список наблюдателя, и вызвать функцию уведомления, которую они унаследовали от интерфейса наблюдателя.

Шаблон декоратора

Допустим, у вас есть кофейня (компонент), и вы хотите иметь функцию в своем классе кофе, которая даст вам цены (операции) на кофе. Вы продаете разные виды кофе с разными начинками. Иногда сочетание многих начинок. Для вас будет головной болью, если вы создадите классы для каждой комбинации.

Шаблон декоратора здесь для вас !! Предположим, вам нужно добавить сливки в капучино. Теперь вы знаете, что в результате снова получится кофе. Сначала мы создадим класс капучино (Конкретный компонент), который наследует класс кофе (компонент). Теперь мы добавим topping(ConreteDecoratorB), создав из него объект и передав объект класса капучино в конструкторе. Поскольку декоратор имеет связь HAS-A с компонентом. Теперь, когда вы вызываете функцию цены (операция), она сначала вызывает функцию операции базового класса плюс цена (добавленное поведение).

Заводская выкройка

Теперь ваш кофейный бизнес работает отлично, поскольку вы использовали отличный шаблон декоратора и теперь решили открыть пиццерию. Здесь требования немного другие, так как здесь вам нужно испечь другой тип пиццы, а затем вам нужно выполнить с ней различные операции, такие как нарезка, упаковка и подача.

Действительно, вы не хотите делать все это в клиентской функции, которой нужен экземпляр класса Pizza. Это должно зависеть от абстракций.

Шаблон проектирования пула объектов:

Почти в каждом проекте правильно используется база данных! Мы делаем так много звонков, и мы продолжаем обновлять БД. Но мы хотим контролировать количество одновременных вызовов. А также мы не хотим создавать соединение для каждого нового запроса.

Шаблон адаптера:

Допустим, ваш PM дает вам странное задание. В вашем проекте у вас есть класс птиц (цель) и класс индейки (адаптируемый). Теперь мы все знаем, как летает индейка. Ваш PM просит выполнить все задания на уроке индейки, которые вы выполняли на уроке птиц.

Здесь возникает потребность в адаптере, он унаследует целевой интерфейс. Таким образом, этот класс адаптера (Flying turkey) будет птицей, поскольку он наследует целевой интерфейс. Но все равно это будет индейка. Теперь, когда кто-то вызывает функцию полета (запрос) этого объекта птицы, мы будем вызывать функцию закрылка (специфический запрос) пять раз класса индюка, чтобы создать эффект полета 😜

Некоторые другие шаблоны проектирования, которые вы должны прочитать: шаблон проектирования стратегии, шаблоны проектирования Singleton.