جارٍ تحميل الدرس...
في نافذة الطباعة اختر «حفظ كملف PDF» كوجهة.
Singleton وFactory وBuilder
الغرض منها
Creational)Singleton وFactory وBuilderالحدس
class) نسخة واحدة فقط، ويوفر وصولا عاما (global access) إلى تلك النسخة الوحيدة.private instance) + دالة وصول getInstance()متى تستخدمه
logging) المركزيةconfiguration managers): مصدر واحد للحقيقةcache): مساحة ذاكرة مشتركةdevice drivers): التحكم في الوصول إلى العتادمثال كود
class DatabaseConnection:
_instance = None
def __new__(cls):
if cls._instance is None:
cls._instance = super().__new__(cls)
cls._instance.connection = None
return cls._instance
def connect(self):
if self.connection is None:
self.connection = "Connected to Database"
return self.connection
db1 = DatabaseConnection()
db2 = DatabaseConnection()
print(db1 is db2) # True - Same instanceالحدس
class) الدقيق، كمصنع سيارات ينتج طرازات مختلفة من عملية واحدة.متى تستخدمه
مثال كود
class Animal(ABC):
@abstractmethod
def make_sound(self): pass
class Dog(Animal):
def make_sound(self): return "Woof!"
class Cat(Animal):
def make_sound(self): return "Meow!"
class AnimalFactory:
@staticmethod
def create_animal(animal_type):
if animal_type == "dog":
return Dog()
elif animal_type == "cat":
return Cat()
dog = AnimalFactory.create_animal("dog")
print(dog.make_sound()) # Woof!مثال من الواقع
GUI) تنشئ أزرارا خاصة بكل نظام تشغيل عبر مصنعFactory
WindowsButton
يختار وقت التشغيل
MacButton
يختار وقت التشغيل
plugins)الحدس
builder نفسه، مما يتيح سلسلة استدعاءات سلسة (fluent chain)متى تستخدمه
constructor) إلى معاملات كثيرة جداimmutable) بحقول كثيرةمثال كود
class PizzaBuilder:
def __init__(self):
self.pizza = Pizza()
def set_size(self, size):
self.pizza.size = size
return self
def add_topping(self, topping):
self.pizza.toppings.append(topping)
return self
def build(self):
return self.pizza
pizza = (PizzaBuilder()
.set_size("Large")
.add_topping("Pepperoni")
.build())| النمط | الفكرة الأساسية |
|---|---|
| Singleton | نسخة واحدة ووصول عام، لكن سهل إساءة استخدامه ليتحول إلى حالة عامة (global state) |
| Factory | يفصل إنشاء الكائن عن استخدامه، ويختار الصنف وقت التشغيل |
| Builder | يبني كائنات معقدة خطوة بخطوة عبر واجهة برمجية سلسة وسهلة القراءة |
Mahmoud Abas|الجزء الأول: الأنماط الإنشائية