Теперь Кью работает в режиме чтения

Мы сохранили весь контент, но добавить что-то новое уже нельзя
Разработка высоконагруженных систем. Опыт 15+   · 22 дек 2021  · progolang.zenclass.ru

Стратегия. Паттерны проектирования в Golang.

Шаблон стратегии в основном позволяет объекту выбирать и выполнять во время выполнения, не зная, как реализовать желаемую бизнес-логику, вместо того, чтобы использовать различные типы алгоритмов, которые можно использовать для выполнения каждой операции.
Я очень часто использую этот паттерн в Go. И я думаю, что Голанг как нельзя лучше подходит для этого шаблона.
В этом примере мы создадим пакет, который сможет подключать разные типы БД. А в будущем мы сможем легко добавить новый тип подключения к БД.
Как показано ниже, я создал интерфейс «IDBConnection» и общий метод «Connect()» для всех унаследованных структур.
type IDBconnection interface {
   Connect()
})
Я создал структуру SqlConnection, а для реализации в интерфейсе IDBconnect написал функцию «Connect()».
type SqlConnection struct {
   connectionString string
}

func (con SqlConnection) Connect() {
   fmt.Println(("Sql " + con.connectionString))
}
Как видно ниже, я сделал то же самое для OracleConnection.
type OracleConnection struct {
   connectionString string
}

func (con OracleConnection) Connect() {
   fmt.Println("Oracle " + con.connectionString)
}
Как показано ниже, структура DBConnection используется для вызова метода Connect () структуры, который реализуется из интерфейса IDBConnection.
type DBConnection struct {
   db IDBconnection
}

func (con DBConnection) DBConnect() {
   con.db.Connect()
}
Как показано ниже, мы создали структуру SQL и Oracle Connection. Оба они устанавливают свойство «db» структуры DBConnection. И структура DBConnection вызывает тот же метод «DBConnect()» для Oracle и SQL DB Connection.
func main() {
   sqlConnection := SqlConnection{connectionString: "Connection is connected"}
   con := DBConnection{db: sqlConnection}
   con.DBConnect()
   orcConnection := OracleConnection{connectionString: "Connection is connected"}
   con2:=DBConnection{db:orcConnection}
   con2.DBConnect()
}