جارٍ تحميل الدرس...
في نافذة الطباعة اختر «حفظ كملف PDF» كوجهة.
الجمع بين عدة أنماط تصميم في نظام واحد
Client
OrderManagementFacade
OrderBuilder
ProductFactory
PaymentStrategy
NotificationSystem
CommandInvoker
نمط إنشائي
class ProductFactory:
@staticmethod
def create_product(product_type, **kwargs):
if product_type == "physical":
return PhysicalProduct(**kwargs)
elif product_type == "digital":
return DigitalProduct(**kwargs)
elif product_type == "subscription":
return SubscriptionProduct(**kwargs)نمط إنشائي
class OrderBuilder:
def __init__(self):
self.order = Order()
def add_product(self, product):
self.order.products.append(product)
return self
def set_customer(self, customer):
self.order.customer = customer
return self
def build(self):
return self.orderنمط بنيوي
class OrderProcessorDecorator:
def __init__(self, processor):
self.processor = processor
def process(self, order):
return self.processor.process(order)
class TaxCalculatorDecorator(OrderProcessorDecorator):
def process(self, order):
result = self.processor.process(order)
# add tax calculation
return resultنمط بنيوي
class OrderManagementFacade:
def __init__(self):
self.inventory = InventoryService()
self.payment = PaymentService()
self.shipping = ShippingService()
def place_order(self, order):
self.inventory.reserve_items(order.products)
result = self.payment.process_payment(order)
if result.success:
self.shipping.schedule_delivery(order)
return resultنمط سلوكي
class PaymentProcessor:
def __init__(self):
self.strategy = None
def set_payment_strategy(self, strategy):
self.strategy = strategy
def process_payment(self, order):
return self.strategy.pay(order.total_amount)PayPal والعملات الرقمية دون تغيير المعالجنمط سلوكي
class Order(Subject):
def __init__(self):
super().__init__()
self._status = "pending"
@status.setter
def status(self, new_status):
self._status = new_status
self.notify(f"Order status changed to {new_status}")نمط سلوكي
class PlaceOrderCommand(Command):
def __init__(self, order_service, order):
self.order_service = order_service
self.order = order
def execute(self):
return self.order_service.place_order(self.order)
def undo(self):
return self.order_service.cancel_order(self.order)قرار التصميم
تعقيد إنشاء الكائن؟
توافق الواجهات؟
نمط التواصل؟
Constructor مباشر
Factory
Builder
Singleton
Adapter
Decorator
Facade
Observer
Strategy
Command
Builder ينشئ الطلبFactory ينشئ كل منتج بداخلهStrategy يعالج الدفعObserver يخطر العميل بتغيرات الحالةDecorator يضيف طبقات حساب الضريبة والشحنCommand ينفذ الطلب مع دعم التراجعFacade ينسق كل خدمة خلف استدعاء واحد| النمط | البديل المتجاوز | سبب الاختيار |
|---|---|---|
| Factory | الإنشاء المباشر | تنوع أنواع المنتجات |
| Builder | إثقال الـ constructor بمعاملات كثيرة | إنشاء طلب معقد |
| Strategy | سلاسل if-else | طرق الدفع القابلة للتبديل |
| Observer | الاستدعاءات المباشرة | إشعارات مفصولة (decoupled) |
| Decorator | التوريث | معالجة طلبات مرنة |
| Command | استدعاء دالة مباشر | يتيح التراجع/الإعادة |
| Facade | استدعاءات الخدمة المباشرة | واجهة برمجية بسيطة تواجه العميل |
Factory وBuilder) تروض تعقيد إنشاء الكائناتDecorator وFacade) تدير التركيب وتبسط الواجهات البرمجيةStrategy وObserver وCommand) تدير التواصل والعملياتMahmoud Abas|دراسة حالة من واقع الحياة العملية: نظام معالجة طلبات التجارة الإلكترونية