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
브리지

Go로 작성된 브리지

브리지는 구조 디자인 패턴입니다. 이 패턴은 비즈니스 로직 또는 거대한 클래스를 독립적으로 개발할 수 있는 별도의 클래스 계층구조들로 나눕니다.

종종 추상화라고 불리는 이러한 계층구조 중 하나는 두 번째 계층구조의 객체​(구현)​에 대한 참조를 얻습니다. 추상화의 호출들 일부​(때로는 대부분)​를 구현 객체에 위임할 수 있습니다. 모든 구현은 공통 인터페이스를 가지므로 추상화 내에서 상호 교환할 수 있습니다.

개념적인 예시

맥과 윈도우 유형의 두 컴퓨터 유형이 있다고 가정해 봅시다. 또한 엡손과 HP 유형의 두 프린터 유형이 있다고 가정해 봅시다. 컴퓨터와 프린터 유형들은 모든 조합으로 서로 작동해야 합니다. 클라이언트는 프린터와 컴퓨터를 연결하는 세부 사항에 대하여 걱정하고 싶어 하지 않습니다.

또 우리는 새 프린터를 도입할 때 코드가 기하급수적으로 증가하는 것을 원하지 않습니다. 따라서 2*2 조합에 대해 4개의 구조체를 만드는 대신 우리는 두 개의 계층구조를 만듭니다.

  • 추상화 계층구조: 이것은 우리의 컴퓨터가 될 것입니다.
  • 구현 계층구조: 이것은 우리의 프린터가 될 것입니다.

이 두 계층구조는 브리지를 통해 서로 통신하며, 여기서 추상화​(컴퓨터)​에는 구현​(프린터)​에 대한 참조가 포함됩니다. 추상화와 구현은 서로 영향을 미치지 않고 독립적으로 개발될 수 있습니다.

computer.go: 추상화

package main

type Computer interface {
	Print()
	SetPrinter(Printer)
}

mac.go: 정제된 추상화

package main

import "fmt"

type Mac struct {
	printer Printer
}

func (m *Mac) Print() {
	fmt.Println("Print request for mac")
	m.printer.PrintFile()
}

func (m *Mac) SetPrinter(p Printer) {
	m.printer = p
}

windows.go: 정제된 추상화

package main

import "fmt"

type Windows struct {
	printer Printer
}

func (w *Windows) Print() {
	fmt.Println("Print request for windows")
	w.printer.PrintFile()
}

func (w *Windows) SetPrinter(p Printer) {
	w.printer = p
}

printer.go: 구현

package main

type Printer interface {
	PrintFile()
}

epson.go: 구상 구현

package main

import "fmt"

type Epson struct {
}

func (p *Epson) PrintFile() {
	fmt.Println("Printing by a EPSON Printer")
}

hp.go: 구상 구현

package main

import "fmt"

type Hp struct {
}

func (p *Hp) PrintFile() {
	fmt.Println("Printing by a HP Printer")
}

main.go: 클라이언트 코드

package main

import "fmt"

func main() {

	hpPrinter := &Hp{}
	epsonPrinter := &Epson{}

	macComputer := &Mac{}

	macComputer.SetPrinter(hpPrinter)
	macComputer.Print()
	fmt.Println()

	macComputer.SetPrinter(epsonPrinter)
	macComputer.Print()
	fmt.Println()

	winComputer := &Windows{}

	winComputer.SetPrinter(hpPrinter)
	winComputer.Print()
	fmt.Println()

	winComputer.SetPrinter(epsonPrinter)
	winComputer.Print()
	fmt.Println()
}

output.txt: 실행 결과

Print request for mac
Printing by a HP Printer

Print request for mac
Printing by a EPSON Printer

Print request for windows
Printing by a HP Printer

Print request for windows

다른 언어로 작성된 브리지

C#으로 작성된 브리지 C++로 작성된 브리지 자바로 작성된 브리지 PHP로 작성된 브리지 파이썬으로 작성된 브리지 루비로 작성된 브리지 러스트로 작성된 브리지 스위프트로 작성된 브리지 타입스크립트로 작성된 브리지