1. แบบแพทเทิร์น Facade คืออะไร
แบบแพทเทิร์น Facade เป็นแบบแพทเทิร์นการออกแบบโครงสร้างที่ให้ส่วนต่อประสานที่เป็นส่วนรวมสำหรับการเข้าถึงเซ็ตของส่วนต่อประสานในระบบย่อย มันซ่อนความซับซ้อนของระบบย่อยและให้ส่วนต่อประสานที่แบบง่ายต่อภายนอก
2. ลักษณะและข้อดีของแบบแพทเทิร์น Facade
แบบแพทเทิร์น Facade มีลักษณะและข้อดีต่อไปนี้:
- มันให้ส่วนต่อประสานที่ง่ายต่อการใช้งาน ทำให้ระบบย่อยเป็นเรื่องง่ายในการใช้งาน
- มันลดความผูกพันระหว่างไคลเอ็นต์และระบบย่อย ไคลเอ็นต์จำเป็นต้องมีการโต้ตอบกับคลาสส่วนต่อประสานเท่านั้นโดยไม่จำเป็นต้องเข้าใจรายละเอียดการปฏิบัติโดยเฉพาะของระบบย่อย
- มันเป็นไปตามหลักการเปิด/ปิด และอนุญาตให้เพิ่มหรือปรับเพิ่มความสามารถในระบบย่อยได้อย่างสะดวก
3. ตัวอย่างการประยุกต์ใช้แบบแพทเทิร์น Facade ในชีวิตจริง
แบบแพทเทิร์น Facade มีการประยุกต์ใช้ในการพัฒนาอย่างแพร่หลาย เช่น:
- การให้ส่วนต่อประสานที่ง่ายต่อการเข้าถึงไลบรารีหรือ API ซับซ้อนจากบุคคลที่สาม
- การกลบกับชุดการดำเนินการตรรกะเพื่อทำให้กระบวนการเรียกของไคลเอ็นต์ง่ายขึ้น
- การให้ส่วนต่อประสานที่ง่ายสำหรับระบบที่มีอยู่เพื่อทำการรวมเข้ากับระบบอื่น
4. การประยุกต์แบบแพทเทิร์น Facade ใน Golang
4.1. UML แผนภาพคลาส Facade ใน Golang
4.2. ตัวอย่างการผนวกรรม
ในตัวอย่างนี้ ขอให้สมมติว่ามีแพลตฟอร์มอีคอมเมิรซึ่งรวมถึงการจัดการคำสั่ง การจัดการสินค้าคงคลัง และระบบการชำระเงิน ระบบการจัดการคำสั่งรับผิดชอบต่อฟังก์ชัน เช่นการสร้างคำสั่งและค้นหาคำสั่ง ระบบการจัดการสินค้าคงคลังรับผิดชอบต่อการค้นหาคลังสินค้าและการลดสินค้าคงคลัง และระบบการชำะเงินรับผิดชอบต่อการประมวลผลการชำระเงิน ในการทำให้การโต้ตอบระหว่างไคลเอ็นต์และระบบย่อยง่ายขึ้น เราสามารถใช้แบบแพทเทิร์น Facade เพื่อออกแบบส่วนต่อประสานของระบบย่อยเหล่านี้
4.3. ขั้นตอนการประยุกต์
type Facade struct {
subsystemA *SubsystemA
subsystemB *SubsystemB
subsystemC *SubsystemC
}
func NewFacade() *Facade {
return &Facade{
subsystemA: NewSubsystemA(),
subsystemB: NewSubsystemB(),
subsystemC: NewSubsystemC(),
}
}
func (f *Facade) Operation() {
f.subsystemA.OperationA()
f.subsystemB.OperationB()
f.subsystemC.OperationC()
}
4.4. ขั้นตอนการประยุกต์ Subsystem
type SubsystemA struct {}
func NewSubsystemA() *SubsystemA {
return &SubsystemA{}
}
func (s *SubsystemA) OperationA() {
// ตัวดำเนินการของ Subsystem A
}
type SubsystemB struct {}
func NewSubsystemB() *SubsystemB {
return &SubsystemB{}
}
func (s *SubsystemB) OperationB() {
// ตัวดำเนินการของ Subsystem B
}
type SubsystemC struct {}
func NewSubsystemC() *SubsystemC {
return &SubsystemC{}
}
func (s *SubsystemC) OperationC() {
// ตัวดำเนินการของ Subsystem C
}
4.5. ขั้นตอนการประยุกต์ Client โค้ด โดยใช้แบบแพทเทิร์น Facade
func main() {
facade := NewFacade()
facade.Operation()
}