Весняний РОЗПРОДАЖ
Адаптер

Адаптер на Go

Адаптер — це структурний патерн, який дозволяє подружити несумісні об’єкти.

Адаптер виступає прошарком між двома об’єктами, перетворюючи виклики одного у виклики, що зрозумілі іншому.

Концептуальний приклад

Ми маємо код клієнта, котрий очікує від об’єкта певних якостей (порт 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.
На основі: Golang By Example

Адаптер іншими мовами програмування

Адаптер на C# Адаптер на C++ Адаптер на Java Адаптер на PHP Адаптер на Python Адаптер на Ruby Адаптер на Rust Адаптер на Swift Адаптер на TypeScript