Abstract Factory هو نمط تصميم إبداعي يتيح لك إنشاء كائنات ذات صلة دون تحديد فئاتها المحددة.
تخيل أنك تقوم بتطوير مجموعة أدوات واجهة المستخدم الرسومية التي يجب أن تدعم معايير الشكل والمظهر المتعددة (مثل Windows وmacOS وLinux). يتطلب كل معيار من معايير الشكل والمظهر مجموعة مختلفة من مكونات واجهة المستخدم مثل الأزرار ومربعات الاختيار وأشرطة التمرير.
بدون نمط Abstract Factory، سيتعين عليك كتابة الكثير من التعليمات البرمجية الشرطية للتعامل مع إنشاء هذه المكونات بناءً على معيار الشكل والمظهر الحالي. هذا الأسلوب غير قابل للتطوير ويجعل من الصعب صيانة قاعدة التعليمات البرمجية وتوسيعها.
باستخدام نمط Abstract Factory، يمكنك إنشاء واجهة لإنشاء عائلات من الكائنات ذات الصلة (على سبيل المثال، الأزرار، ومربعات الاختيار، وأشرطة التمرير) وتنفيذ هذه الواجهة لكل معيار من معايير الشكل والمظهر. بهذه الطريقة، يمكن أن يعمل رمز العميل مع أي معيار من حيث الشكل والمظهر دون معرفة تفاصيل كيفية إنشاء المكونات.
فكر في مصنع أثاث ينتج الكراسي والطاولات بأنماط مختلفة مثل الكلاسيكية والحديثة.
يتطلب كل نمط مجموعة مختلفة من المكونات (مثل الأرجل ومسند الظهر ومساند الأذرع) والمواد (مثل الخشب والمعادن والبلاستيك).
package main import "fmt" // Abstract Factory type FurnitureFactory interface { MakeChair() Chair MakeTable() Table } func NewFurnitureFactory(style string) (FurnitureFactory, error) { if style == "classic" { return &Classic{}, nil } if style == "modern" { return &Modern{}, nil } return nil, fmt.Errorf("Style %s is not supported", style) } type Chair struct { Name string Material string } type Table struct { Name string Material string } // Concrete Classic Factory type Classic struct{} func (a *Classic) MakeChair() Chair { return Chair{ Name: "Classic Chair", Material: "Wood", } } func (a *Classic) MakeTable() Table { return Table{ Name: "Classic Table", Material: "Wood", } } // Concrete Modern Factory type Modern struct{} func (n *Modern) MakeChair() Chair { return Chair{ Name: "Modern Chair", Material: "Plastic", } } func (n *Modern) MakeTable() Table { return Table{ Name: "Modern Table", Material: "Plastic", } } func main() { factory, _ := NewFurnitureFactory("classic") chair := factory.MakeChair() table := factory.MakeTable() fmt.Printf("Chair: %s\n", chair.Name) fmt.Printf("Table: %s\n", table.Name) factory, _ = NewFurnitureFactory("modern") chair = factory.MakeChair() table = factory.MakeTable() fmt.Printf("Chair: %s\n", chair.Name) fmt.Printf("Table: %s\n", table.Name) }
يوضح هذا الكود نمط Abstract Factory من خلال إنشاء أثاث (كراسي وطاولات) بأنماط مختلفة (كلاسيكية وحديثة). فهو يحدد واجهة لإنشاء عائلات من الكائنات ذات الصلة والتطبيقات الملموسة لكل نمط، مما يتيح سهولة التوسع والصيانة.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3