Ail Ahmed نشر الأحد في 14:41 أرسل تقرير مشاركة نشر الأحد في 14:41 السلام عليكم كيف اطبق علي Abstract factory بلغة باثيون ؟ 2 اقتباس رابط هذا التعليق شارك على الشبكات الإجتماعية More sharing options...
0 عبد الوهاب بومعراف نشر الأحد في 14:53 أرسل تقرير مشاركة نشر الأحد في 14:53 نمط ال Abstract Factory هو أحد أنماط التصميم المستخدمة في البرمجة الكائنية لتطبيقه يمكن أن نأخذ مثالا بيسيط وعمليا لكن قبل ذلك يجب أن نفهم أولا كيفية تطبيق النمط أولا نقوم بتحديد واجهتين (أو فئات مجردة) تمثل العائلات المختلفة من الكائنات ثم يجب إنشاء الفئات التي تنفذ هذه الواجهات بعدها يأتي الدور على إنشاء المصنع أين يجب أن تنشئ مصنعا Factory يمكنه إنشاء كائنات من الفئات المحددة وهذا مثال لنفترض أننا نريد إنشاء واجهات مستخدم مختلفة لنظامين وليكونا نظام Windows ونظام macOS: from abc import ABC, abstractmethod # واجهة للزر class Button(ABC): @abstractmethod def paint(self): pass # واجهة لواجهة المستخدم class GUIFactory(ABC): @abstractmethod def create_button(self) -> Button: pass # تنفيذ للزر في Windows class WindowsButton(Button): def paint(self): return "Windows Button" # تنفيذ للزر في macOS class MacOSButton(Button): def paint(self): return "MacOS Button" # مصنع Windows class WindowsFactory(GUIFactory): def create_button(self) -> Button: return WindowsButton() # مصنع macOS class MacOSFactory(GUIFactory): def create_button(self) -> Button: return MacOSButton() # استخدام المصنع def client_code(factory: GUIFactory): button = factory.create_button() print(button.paint()) # اختيار المصنع windows_factory = WindowsFactory() client_code(windows_factory) mac_factory = MacOSFactory() client_code(mac_factory) هذه الشيفرة ستستخدم نموذج المصنع المجرد (Abstract Factory) لإنشاء أزرار لواجهة المستخدم لنظامي التشغيل بحيث يحتوي على واجهات تحدد كيفية إنشاء الأزرار (Button و GUIFactory)، وفئات تقوم بتنفيذ هذه الواجهات (مثل WindowsButton و MacOSButton) ويقوم كل مصنع سواء WindowsFactory أو MacOSFactory بإنشاء نوع محدد من الأزرار في الأخير الدالة client_code تستخدم هذه المصانع لإنشاء الأزرار ثم طباعتها. 1 اقتباس رابط هذا التعليق شارك على الشبكات الإجتماعية More sharing options...
0 Chihab Hedidi نشر الأحد في 14:54 أرسل تقرير مشاركة نشر الأحد في 14:54 يمكنك إنشاء واجهة توفر إنشاء كائنات لعائلات متعددة من الكائنات المرتبطة أو التابعة، دون الحاجة إلى تحديد فئاتها المحددة، و الفكرة الأساسية هي أن يكون لديك عدة مصانع مختلفة، كل مصنع يقوم بإنشاء مجموعة من الكائنات المتوافقة مع بعضها البعض، لنفترض أن لدينا منتجين كرسي و طاولة، ونريد مصنعين واحد يصنع الأثاث الحديث وآخر يصنع الأثاث الكلاسيكي، لذا سيتعين علينا إنشاء الواجهات بهذا الشكل: from abc import ABC, abstractmethod # واجهة الكرسي class Chair(ABC): @abstractmethod def sit_on(self): pass # واجهة الطاولة class Table(ABC): @abstractmethod def eat_on(self): pass ثم تعرف الفئات التي تنفذ الواجهات: # كراسي حديثة class ModernChair(Chair): def sit_on(self): return "Sitting on a modern chair." # طاولات حديثة class ModernTable(Table): def eat_on(self): return "Eating on a modern table." # كراسي كلاسيكية class ClassicChair(Chair): def sit_on(self): return "Sitting on a classic chair." # طاولات كلاسيكية class ClassicTable(Table): def eat_on(self): return "Eating on a classic table." ثم إنشاء المصنع المجرد: class FurnitureFactory(ABC): @abstractmethod def create_chair(self) -> Chair: pass @abstractmethod def create_table(self) -> Table: pass و المصانع الملموسة: # مصنع الأثاث الحديث class ModernFurnitureFactory(FurnitureFactory): def create_chair(self) -> Chair: return ModernChair() def create_table(self) -> Table: return ModernTable() # مصنع الأثاث الكلاسيكي class ClassicFurnitureFactory(FurnitureFactory): def create_chair(self) -> Chair: return ClassicChair() def create_table(self) -> Table: return ClassicTable() و في الأخير تستخدمهم بهذا الشكل: def client_code(factory: FurnitureFactory): chair = factory.create_chair() table = factory.create_table() print(chair.sit_on()) print(table.eat_on()) # استخدام مصنع الأثاث الحديث modern_factory = ModernFurnitureFactory() client_code(modern_factory) # استخدام مصنع الأثاث الكلاسيكي classic_factory = ClassicFurnitureFactory() client_code(classic_factory) و يمكنك أن تطلع أكثر على كيف يعمل بالضبط من خلال هذه المقالة : 1 اقتباس رابط هذا التعليق شارك على الشبكات الإجتماعية More sharing options...
0 Ail Ahmed نشر الأحد في 14:55 الكاتب أرسل تقرير مشاركة نشر الأحد في 14:55 شكرااا لحضرتكم جدا اقتباس رابط هذا التعليق شارك على الشبكات الإجتماعية More sharing options...
السؤال
Ail Ahmed
السلام عليكم
كيف اطبق علي Abstract factory بلغة باثيون ؟
رابط هذا التعليق
شارك على الشبكات الإجتماعية
3 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.