Адаптер — це структурний патерн, який дозволяє подружити несумісні об’єкти.
Адаптер виступає прошарком між двома об’єктами, перетворюючи виклики одного у виклики, що зрозумілі іншому.
Концептуальний приклад
Ми маємо код клієнта, котрий очікує від об’єкта певних якостей (порт Lightning), але також ми маємо інший об’єкт під назвою adaptee (ноутбук на Windows), який надає той же функціонал, але через інший інтерфейс (USB порт).
У такій ситуації нам підійде патерн Адаптер. Ми створимо структуру adapter , яка буде:
Реалізувати той же інтерфейс, який очікує клієнт (порт Lightning).
Перекладати запит від клієнта до об’єкту, що адаптується, у формі, яку він очікує. Адаптер приймає коннектор Lightning, після чого переводить його сигнали у формат USB у ноутбуці на Windows.
client.go: Клієнтський код
package main
import "fmt"
type Client struct {
}
func (c *Client) InsertLightningConnectorIntoComputer(com Computer) {
fmt.Println("Client inserts Lightning connector into computer.")
com.InsertIntoLightningPort()
}
computer.go: Інтерфейс клієнта
package main
type Computer interface {
InsertIntoLightningPort()
}
mac.go: Сервіс
package main
import "fmt"
type Mac struct {
}
func (m *Mac) InsertIntoLightningPort() {
fmt.Println("Lightning connector is plugged into mac machine.")
}
windows.go: Невідомий сервіс
package main
import "fmt"
type Windows struct{}
func (w *Windows) insertIntoUSBPort() {
fmt.Println("USB connector is plugged into windows machine.")
}
windowsAdapter.go: Адаптер
package main
import "fmt"
type WindowsAdapter struct {
windowMachine *Windows
}
func (w *WindowsAdapter) InsertIntoLightningPort() {
fmt.Println("Adapter converts Lightning signal to USB.")
w.windowMachine.insertIntoUSBPort()
}
main.go
package main
func main() {
client := &Client{}
mac := &Mac{}
client.InsertLightningConnectorIntoComputer(mac)
windowsMachine := &Windows{}
windowsMachineAdapter := &WindowsAdapter{
windowMachine: windowsMachine,
}
client.InsertLightningConnectorIntoComputer(windowsMachineAdapter)
}
output.txt: Результат виконання
Client inserts Lightning connector into computer.
Lightning connector is plugged into mac machine.
Client inserts Lightning connector into computer.
Adapter converts Lightning signal to USB.
USB connector is plugged into windows machine.
Адаптер іншими мовами програмування