SOLDES de printemps
Adaptateur

Adaptateur en Go

L’Adaptateur est un patron de conception structurel qui permet à des objets incompatibles de collaborer.

L’adaptateur fait office d’emballeur entre les deux objets. Il récupère les appels à un objet et les met dans un format et une interface reconnaissables par le second objet.

Exemple conceptuel

Notre code client veut utiliser les fonctionnalités d’un objet (port Lightning), mais un autre objet appelé adapté (ordinateur portable sous Windows) offre les mêmes fonctionnalités, mais via une interface différente (port USB).

C’est ici que le patron de conception adaptateur entre en jeu. Nous créons un type de struct adaptateur qui va :

  • Se conformer à la même interface que celle attendue par le client (port Lightning).

  • Traduire la demande du client à l’adapté, sous la forme attendue par ce dernier. L’adaptateur accepte un connecteur Lightning, traduit son signal dans un format USB, puis les envoie au port USB de l’ordinateur portable.

client.go: Code client

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: Interface client

package main

type Computer interface {
	InsertIntoLightningPort()
}

mac.go: Service

package main

import "fmt"

type Mac struct {
}

func (m *Mac) InsertIntoLightningPort() {
	fmt.Println("Lightning connector is plugged into mac machine.")
}

windows.go: Service inconnu

package main

import "fmt"

type Windows struct{}

func (w *Windows) insertIntoUSBPort() {
	fmt.Println("USB connector is plugged into windows machine.")
}

windowsAdapter.go: Adapter

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: Résultat de l’exécution

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.

Adaptateur dans les autres langues

Adaptateur en C# Adaptateur en C++ Adaptateur en Java Adaptateur en PHP Adaptateur en Python Adaptateur en Ruby Adaptateur en Rust Adaptateur en Swift Adaptateur en TypeScript