Friend spotlight!
Whimsical Animations course
Friend spotlight!
NEW Whimsical Animations course
Friend spotlight! NEW Whimsical Animations course
huge discount only this week
Friend spotlight! Want to make your project stand out? NEW Whimsical Animations course huge discount only this week
Polecenie

Polecenie w języku Go

Polecenie to behawioralny wzorzec projektowy według którego żądania lub proste działania są konwertowane na obiekty.

Wyżej wymieniona konwersja pozwala odkładać zadania w czasie, uruchamiać je zdalnie, przechowywać ich historię, itp.

Przykład koncepcyjny

Popatrzmy na przykład użycia wzorca Polecenie opartego na telewizorze. TV można włączyć poprzez:

  • Włącznik na pilocie;
  • Włącznik na samym telewizorze.

Zaczynamy od zaimplementowania polecenia WŁĄCZ którego odbiorcą będzie TV. Wywołanie metody execute polecenia spowoduje wywołanie przezeń funkcji TV.on. Ostatnim elementem jest definicja nadawcy. Mamy bowiem i pilota i sam TV, a oba będą zawierać obiekt-polecenie WŁĄCZ.

Zwróćmy uwagę, że opakowaliśmy to samo żądanie w kilka wywoływaczy. Podobnie można postąpić z innymi poleceniami. Zaletą tworzenia osobnego obiektu polecenie jest rozsprzęgnięcie logiki graficznego interfejsu użytkownika od logiki biznesowej. Nie trzeba opracowywać różnych obsługujących dla każdego z nadawców. Obiekt polecenie zawiera wszystkie niezbędne informacje, może więc też być użyty do opóźnienia wykonania.

button.go: Nadawca

package main

type Button struct {
	command Command
}

func (b *Button) press() {
	b.command.execute()
}

command.go: Interfejs polecenia

package main

type Command interface {
	execute()
}

onCommand.go: Konkretne polecenie

package main

type OnCommand struct {
	device Device
}

func (c *OnCommand) execute() {
	c.device.on()
}

offCommand.go: Konkretne polecenie

package main

type OffCommand struct {
	device Device
}

func (c *OffCommand) execute() {
	c.device.off()
}

device.go: Interfejs odbiorcy

package main

type Device interface {
	on()
	off()
}

tv.go: Konkretny odbiorca

package main

import "fmt"

type Tv struct {
	isRunning bool
}

func (t *Tv) on() {
	t.isRunning = true
	fmt.Println("Turning tv on")
}

func (t *Tv) off() {
	t.isRunning = false
	fmt.Println("Turning tv off")
}

main.go: Kod klienta

package main

func main() {
	tv := &Tv{}

	onCommand := &OnCommand{
		device: tv,
	}

	offCommand := &OffCommand{
		device: tv,
	}

	onButton := &Button{
		command: onCommand,
	}
	onButton.press()

	offButton := &Button{
		command: offCommand,
	}
	offButton.press()
}

output.txt: Wynik działania

Turning tv on
Turning tv off

Polecenie w innych językach

Polecenie w języku C# Polecenie w języku C++ Polecenie w języku Java Polecenie w języku PHP Polecenie w języku Python Polecenie w języku Ruby Polecenie w języku Rust Polecenie w języku Swift Polecenie w języku TypeScript