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
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 แล้ว