1.1 นิยาม
แพทเทิร์นแอดาปเตอร์เป็นแพทเทิร์นออกแบบโครงสร้างที่ช่วยให้สามารถแปลงอินเทอร์เฟซของคลาสให้อินเทอร์เฟซอื่นที่คลายเอาไว้โดยลูกค้าไว้คาดหวัง แพทเทิร์นแอดาปเตอร์ช่วยให้คลาสที่ไม่สามารถทำงานร่วมกันเนื่องจากอินเทอร์เฟซที่ไม่สามารถทำงานร่วมแบบเข้ากันได้
1.2 วัตถุประสงค์และผลกระทบ
วัตถุประสงค์หลักของแพทเทิร์นแอดาปเตอร์คือการแก้ปัญหาความไม่เข้ากันระหว่างอินเทอร์เฟสสองชุดที่ไม่เข้ากันกัน โดยการใช้คลาสอาเดปเตอร์ มันทำให้คลาสที่ไม่เข้ากันสามารถร่วมมือกันเพื่อดำเนินการฟังก์ชันพิเศษที่เฉพาะเจาะจง
1.3 หลักการพื้นฐานของแพทเทิร์นแอดาปเตอร์
- เมื่อต้องการแปลงอินเทอร์เฟสเป็นอินเทอร์เฟสอื่น แพทเทิร์นแอดาปเตอร์เหมาะสำหรับการจัดการกับคลาสที่มีอยู่แล้ว
- แพทเทิร์นแอดาปเตอร์ดำเนินการแปลงอินเทอร์เฟสโดยการสร้างคลาสอาเดปเตอร์แทนที่จะแก้ไขคลาสเดิม
- แพทเทิร์นแอดาปเตอร์สามารถนำไปใช้งานผ่านคลาสอาเดปเตอร์หรือออบเจ็กต์อาเดปเตอร์
2. ลักษณะและข้อดีของแพทเทิร์นแอดาปเตอร์
แพทเทิร์นแอดาปเตอร์มีลักษณะและข้อดีดังต่อไปนี้:
- มีการแนะนำวิธีแปลงอินเทอร์เฟส เพื่อให้คลาสที่ไม่เข้ากันสามารถทำงานร่วมกัน
- สามารถเพิ่มความยืดหยุ่นและปรับขนาดของระบบ
- สามารถนำคลาสที่มีอยู่มาใช้ใหม่ ลดการทำซ้ำในการเขียนโค้ด และลดต้นทุนในการพัฒนา
- มีวิธีการออกแบบแบบ loose coupling ที่ทำให้ระบบมีความยืดหยุ่นและง่ายต่อการบำรุงรักษา
3. สถานการณ์การใช้แพทเทิร์นแอดาปเตอร์
แพทเทิร์นแอดาปเตอร์มักถูกนำมาใช้ในสถานการณ์ต่อไปนี้:
- เมื่อต้องการใช้คลาสที่มีอยู่แล้ว แต่อินเทอร์เฟสไม่ตรงตามความต้องการ
- เมื่อต้องการสร้างคลาสที่สามารถใช้งานกับอินเทอร์เฟสที่ไม่เข้ากัน
- เมื่อต้องการทำการแปลงอินเทอร์เฟสระหว่างคลาสหลายๆ รายการ
4.1 แผนภาพคลาส UML
4.2 ขั้นตอนการปฏิบัติการ 1: ออกแบบอินเทอร์เฟสแอดาปเตอร์
package main
type Target interface {
Request()
}
4.3 ขั้นตอนการปฏิบัติการ 2: การปฏิบัติการคลาสอาเดปเตอร์
package main
type Adaptee struct {
}
func (a *Adaptee) SpecificRequest() {
// ดำเนินการกิริยาที่เฉพาะเจาะจงของคลาส Adaptee
}
type Adapter struct {
adaptee *Adaptee
}
func NewAdapter() *Adapter {
return &Adapter{adaptee: &Adaptee{}}
}
func (a *Adapter) Request() {
a.adaptee.SpecificRequest()
}
4.4 ขั้นตอนการปฏิบัติการ 3: รหัสลูกค้าการเรีกะสแพทเทิร์นแอดาปเตอร์
package main
func main() {
adapter := NewAdapter()
adapter.Request()
}
5.1 ความแตกต่างและความเชื่อมโยงระหว่างแพทเทิร์นแอดาปเตอร์กับแพทเทิร์นบริดจ์
ทั้งแพทเทิร์นแอดาปเตอร์และแพทเทิร์นบริดจ์สามารถใช้ในการแก้ปัญหาอินเทอร์เฟสระหว่างคลาสสองชุดที่แตกต่างกัน แต่ความแตกต่างหลักๆ คือ:
- แพทเทิร์นแอดาปเตอร์เน้นไปที่การแปลงคุณสมบัติกันระหว่างอินเทอร์เฟสสองชุดที่มีอยู่แล้ว
- แพทเทิร์นบริดจ์เน้นไปที่การแยกความเป็นทางหรือการทำงาน โดยให้เกิดความแยกหรือออกแยกออกมาจากโดยตัวแบริจระหว่างอินเทอร์เฟสและคลาสการปฏิบัติการ
5.2 การประยุกต์ใช้แพทเทิร์นแอดาปเตอร์ในโครงสร้างบริการไมโครเซอร์วิส
ในโครงสร้างบริการไมโครเซอร์วิส ไมโครเซอร์วิสต่างๆ อาจใช้อินเทอร์เฟสที่แตกต่างกันในการสื่อสาร แพทเทิร์นแอดาปเตอร์สามารถช่วยให้เราแก้ไขปัญหาความไม่เข้ากันระหว่างบริการที่แตกต่างกัน ทำให้สามารถทำงานร่วมกันได้
5.3 การประยุกต์ใช้แพทเทิร์นแอดาปเตอร์ในการพัฒนาฟรอนต์เอ็นด์และแบ็กเอ็นด์ที่แยกกัน
ในการพัฒนาฟรอนต์เอ็นด์และแบ็กเอ็นด์ที่แยกกัน ฝั่งฟรอนต์เอ็นด์มักต้องเรียกรับข้อมูลจากฝั่งแบ็กเอ็นด์ แต่อินเทอร์เฟสที่เปิดเผยโดยฝั่งแบ็กเอ็นด์อาจไม่ตรงตามความต้องการของฝั่งฟรอนต์เอ็นด์ แพทเทิร์นแอดาปเตอร์สามารถช่วยให้เราปรับเปลี่ยนอินเทอร์เฟสของฝั่งแบ็กเอ็นด์ให้ตรงตามที่ฝั่งฟรอนต์เอ็นด์คาดหวัง ทำให้สามารถทำงานร่วมกันได้อย่างไม่มีจะตัดต่อ