1. แพทเทิร์น Bridge คืออะไร

1.1 ความหมายและแนวคิด

แพทเทิร์น Bridge หรือรูปแบบแพทเทิร์นช่วยในการออกแบบ (Bridge Pattern) เป็นชนิดของแพทเทิร์นการออกแบบโครงสร้างที่ทำให้การบวกความเรียบง่ายและการปฏิบัติได้แยกกัน ทำให้สามารถเปลี่ยนแปลงได้อิสระ สรุปคือ แพทเทิร์น Bridge คือวิธีการแยกความแปลกแยกในจากการปฏิบัติ

1.2 วัตถุประสงค์และผลที่ได้จากแพทเทิร์น Bridge

วัตถุประสงค์หลักของแพทเทิร์น Bridge คือการแยกความแปลกแยกในออกจากการปฏิบัติของมันเองเพื่อให้สามารถเปลี่ยนแปลงและขยายตัวได้อิสระ ซึ่งทำได้โดยการสร้างชั้นสะพานแบบนามธรรมที่เชื่อมโยงกับคลาสการปฏิบัติที่แน่นอน

2. ลักษณะและประโยชน์ของแพทเทิร์น Bridge

บางคุณลักษณะและประโยชน์หลักของแพทเทิร์น Bridge ประกอบด้วย:

  • ขยายขีดจำกัดของระบบที่ได้รับการปรับปรุง ทั้งการบวกความแปลกแยกในและการปฏิบัติสามารถถูกขยายตัวได้อิสระโดยที่ไม่มีผลต่อกัน
  • สอดคล้องกับกฎ Open/Closed การบวกความแปลกแยกในและการปฏิบัติสามารถถูกขยายตัวได้อิสระโดยที่ไม่มีผลต่อกัน
  • ความโปร่งใสของรายละเอียดการปฏิบัติสู่ลูกค้า ทำให้สามารถซ่อนรายละเอียดการปฏิบัติจากผู้ใช้งาน

3. สถานการณ์การใช้งานของแพทเทิร์น Bridge

  • เมื่อคุณต้องการแยกการปฏิบัติของวัตถุที่ซับซ้อนออกจากการบวกความแปลกแยกใน แพทเทิร์น Bridge สามารถใช้งานได้ สิ่งนี้อาจส่งผลดีต่อการประสิทธิภาพของรหัสที่มีอยู่โดยเฉพาะอย่างยิ่งเมื่อโปรแกรมใช้ส่วนหนึ่งของวัตถุในระหว่างการดำเนินการ
  • เมื่อคุณต้องการแบ่งปันสถานะการปฏิบัติเฉพาะบางอย่างระหว่างวัตถุหลายๆ ตัว แต่สำหรับรหัสลูกค้าพวกเขาต้องการแสดงให้เห็นว่าเป็นคลาสที่อิสระ

4. การใช้งานแพทเทิร์น Bridge ใน Golang

4.1 แนะนำแผนภาพคลาส UML

แพทเทิร์น Bridge ใน Golang

4.2 ขั้นตอนการปฏิบัติโดยละเอียด

4.2.1 นิยามอินเตอร์เฟซบทบาทนามธรรม

ก่อนอื่น เราจะกำหนดอินเตอร์เฟซ DrawAPI รหัสที่เฉพาะเจาะจงคือดังนี้:

// อินเตอร์เฟซบทบาทนามธรรม
type DrawAPI interface {
	DrawACircle(radius, x, y int)
}

4.2.2 ปฏิบัติคลาสบทบาทนามธรรม

จากนั้น เราจะกำหนดคลาสสองแบบ RedCircle และ BlueCircle ซึ่งปฏิบัติวิธีในอินเตอร์เฟซ DrawAPI:

// คลาสบทบาทนามธรรม
type RedCircle struct {}

func (c *RedCircle) DrawACircle(radius, x, y int) {
    // โลจิกของการวาดวงกลมสีแดง
}

type BlueCircle struct {}

func (c *BlueCircle) DrawACircle(radius, x, y int) {
    // โลจิกของการวาดวงกลมสีน้ำเงิน
}

4.2.3 นิยามอินเตอร์เฟซสะพานนามธรรม

นิยามอินเตอร์เฟซ Shape สำหรับสะพาน:

// อินเตอร์เฟซสะพานนามธรรม
type Shape interface {
	Draw()
}

4.2.4 ปฏิบัติคลาสสะพานนามธรรม

ปฏิบัติคลาส Circle ที่ปฏิบัติอินเตอร์เฟซ Shape และมีวัตถุของชนิดอินเตอร์เฟซ DrawAPI:

// คลาสสะพานนามธรรม
type Circle struct {
    x, y, radius int
    drawAPI      DrawAPI
}

func (c *Circle) Draw() {
    c.drawAPI.DrawACircle(c.radius, c.x, c.y)
}

4.2.5 ตัวอย่างการเรียกใช้ลูกค้า

func main() {
    redCircle := &Circle{100, 100, 10, new(RedCircle)}
    blueCircle := &Circle{100, 100, 10, new(BlueCircle)}

    redCircle.Draw()
    blueCircle.Draw()
}

ด้วยวิธีนี้ เราได้ปฏิบัติแพทเทิร์น Bridge ใน Golang แล้ว