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

แบบแพทเทิร์น Facade เป็นแบบแพทเทิร์นการออกแบบโครงสร้างที่ให้ส่วนต่อประสานที่เป็นส่วนรวมสำหรับการเข้าถึงเซ็ตของส่วนต่อประสานในระบบย่อย มันซ่อนความซับซ้อนของระบบย่อยและให้ส่วนต่อประสานที่แบบง่ายต่อภายนอก

2. ลักษณะและข้อดีของแบบแพทเทิร์น Facade

แบบแพทเทิร์น Facade มีลักษณะและข้อดีต่อไปนี้:

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

3. ตัวอย่างการประยุกต์ใช้แบบแพทเทิร์น Facade ในชีวิตจริง

แบบแพทเทิร์น Facade มีการประยุกต์ใช้ในการพัฒนาอย่างแพร่หลาย เช่น:

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

4. การประยุกต์แบบแพทเทิร์น Facade ใน Golang

4.1. UML แผนภาพคลาส Facade ใน Golang

แบบแพทเทิร์น 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()
}