1. Facade Pattern کیا ہے
Facade Pattern ایک ساختی ڈیزائن پیٹرن ہے جو ایک سب سسٹم میں موجود مختلف انٹرفیسز تک رسائی کے لئے ایک متحدہ انٹرفیس فراہم کرتا ہے۔ یہ سب سسٹم کی پیچیدگی کو چھپاتا ہے اور بیرون کو ایک سادہ انٹرفیس فراہم کرتا ہے۔
2. Facade پیٹرن کی خصوصیات اور فوائد
Facade Pattern کی منفرد خصوصیات اور فوائد مندرجہ ذیل ہیں:
- یہ ایک سادہ انٹرفیس فراہم کرتا ہے، جو سب سسٹم کو استعمال کرنا آسان بناتا ہے۔
- یہ کلائنٹ اور سب سسٹم کے درمیان رشتے کو کم کرتا ہے۔ کلائنٹ کو صرف فیسیڈ کلاس کے ساتھ تعلق رکھنا ہوتا ہے، بغیر سب سسٹم کی خصوصی تفصیلات کو سمجھنے کی ضرورت کے بغیر۔
- یہ کھلے/بند اصول کے مطابق ہوتا ہے اور سب سسٹم میں فعالیتوں کی آسان اضافہ یا ترتیب کی اجازت دیتا ہے۔
3. Facade Pattern کے عملی استعمال کی مثالیں
Facade Pattern کا عملی استعمال ترقی کے مختلف شعبوں میں ہوتا ہے، جیسے:
- پیچیدہ تیسری شخص کی لائبریریز یا APIز تک رسائی حاصل کرنے کے لئے ایک سادہ انٹرفیس فراہم کرنا۔
- ایک مجموعہ پیچیدہ منطقی عملیات کو کلائنٹ کے دعوہ کرنے کے عمل کو سادہ بنانے کے لئے کپسولیٹ کرنا۔
- موجودہ نظام کو دوسرے نظاموں کے ساتھ انضمام کے لئے ایک سادہ انٹرفیس فراہم کرنا۔
4. Golang میں Facade Pattern کا نمائندہ داری کرنا
4.1. UML کلاس ڈائیگرام
4.2. مثال کی تعارف
اس مثال میں، ہم فرض کرتے ہیں کہ ایک ای-کامرس پلیٹ فارم ہے جس میں آرڈر کی انتظامی، انوینٹری کی انتظامی، اور ادائیگی کے نظام شامل ہیں۔ آرڈر کی انتظامی کا نظام آرڈر بنانا اور آرڈر کی تفصیلات کا پتا لگانا، انوینٹری کی انتظامی کا نظام پروڈکٹ کی انوینٹری کا پتا لگانا اور انوینٹری میں کمی کرنا، اور ادائیگی کے نظام کا آرڈر کی ادائیگی کی پروسیسنگ کرنا ہے۔ کلائنٹ اور سب سسٹمز کے درمیان تعامل کو آسان بنانے کے لئے، ہم Facade Pattern کا استعمال کر کے ان سب سسٹموں کے انٹرفیس ڈیزائن کرنے کے لئے استعمال کر سکتے ہیں۔
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() {
// 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. نمائندہ کرنے کا قدم 3: Facade Pattern کا استعمال کرتے ہوئے کلائنٹ کوڈ کا نمائندہ کریں
func main() {
facade := NewFacade()
facade.Operation()
}