1. الگوی نقاب

الگوی نقاب یک الگوی طراحی ساختاری است که یک رابط یکپارچه برای دسترسی به مجموعه ای از رابط ها در یک زیرسیستم فراهم می کند. این الگو پیچیدگی زیرسیستم را پنهان می کند و رابط ساده تری به بیرون ارائه می دهد.

2. ویژگی ها و مزایای الگوی نقاب

الگوی نقاب دارای ویژگی ها و مزایای زیر است:

  • یک رابط ساده فراهم می کند که زیرسیستم را آسانتر در استفاده می‌کند.
  • اتصال بین مشتری و زیرسیستم را کاهش می دهد. مشتری تنها باید با کلاس نقاب تعامل داشته باشد بدون اینکه جزئیات پیاده سازی خاص زیرسیستم را بفهمد.
  • با اصل باز/بسته مطابقت دارد و امکان افزودن یا اصلاح ساده‌ای از قابلیت های زیرسیستم را فراهم می کند.

3. نمونه های کاربردی الگوی نقاب

الگوی نقاب در توسعه دارای کاربردهای عملی گسترده ای است، مانند:

  • فراهم کردن یک رابط ساده برای دسترسی به کتابخانه ها یا رابط های پیچیده شخص سوم.
  • پوشش دادن یک مجموعه از عملیات منطقی پیچیده برای ساده‌تر کردن فرآیند فراخوانی مشتری.
  • فراهم کردن یک رابط ساده برای یک سیستم موجود به منظور ادغام با سایر سیستم ها.

4. پیاده سازی الگوی نقاب در Golang

4.1. نمودار کلاس UML

الگوی نقاب در Golang

4.2. معرفی مثال

در این مثال، فرض کنید یک پلتفرم تجارت الکترونیکی وجود دارد که شامل مدیریت سفارشات، مدیریت موجودی و سیستم پرداخت است. سیستم مدیریت سفارشات مسئول کارایی هایی مانند ایجاد سفارشات و پرس و جوی سفارشات است، سیستم مدیریت موجودی مسئول پرس و جوی موجودی محصول و کاهش موجودی است و سیستم پرداخت مسئول پردازش پرداخت سفارشات است. برای ساده کردن تعامل بین مشتری و زیرسیستم‌ها، ما می توانیم از الگوی نقاب برای طراحی رابط های این زیرسیستم ها استفاده کنیم.

4.3. مرحله پیاده سازی 1: تعریف کلاس نقاب

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. مرحله پیاده سازی 2: تعریف کلاس های زیرسیستم

type SubsystemA struct {}

func NewSubsystemA() *SubsystemA {
    return &SubsystemA{}
}

func (s *SubsystemA) OperationA() {
    // منطق برای عملیات زیرسیستم A
}

type SubsystemB struct {}

func NewSubsystemB() *SubsystemB {
    return &SubsystemB{}
}

func (s *SubsystemB) OperationB() {
    // منطق برای عملیات زیرسیستم B
}

type SubsystemC struct {}

func NewSubsystemC() *SubsystemC {
    return &SubsystemC{}
}

func (s *SubsystemC) OperationC() {
    // منطق برای عملیات زیرسیستم C
}

4.5. مرحله پیاده سازی 3: پیاده سازی کد مشتری با استفاده از الگوی نقاب

func main() {
    facade := NewFacade()
    facade.Operation()
}