جارٍ تحميل الدرس...
في نافذة الطباعة اختر «حفظ كملف PDF» كوجهة.
Adapter وDecorator وFacade
Object Composition) والعلاقات بين الكيانات المختلفة؛ كل نمط يعيد تشكيل كيفية ترابط الكائنات، لا كيفية إنشائها.Adapter وDecorator وFacadeالأنماط البنيوية
Adapter - الحدسpower adapter) يجعل جهازك يناسب مقبسا مختلفا. يغلف صنفا موجودا خلف واجهة جديدة متوقعة.Client
يستدعي عبر الواجهة المتوقعة
Target
الواجهة المتوقعة
Adapter
ينفذ Target ويغلف Adaptee
Adaptee
الصنف القديم غير المتوافق
الأنماط البنيوية
Adapter - متى تستخدمهlegacy) دون تعديلهالأنماط البنيوية
Adapter - مثال كودclass OldPrinter:
def old_print(self, text):
return f"Old printer: {text}"
class PrinterAdapter:
def __init__(self, old_printer):
self.old_printer = old_printer
def print(self, text):
return self.old_printer.old_print(text)
adapter = PrinterAdapter(OldPrinter())
print(adapter.print("Hello World"))PrinterAdapter يستدعي old_print القديمة خلف واجهة print الجديدة.الأنماط البنيوية
Decorator - الحدسSimpleCoffee
التكلفة الأساسية 2.0$
+ Milk
طبقة تضيف 0.5$
الأنماط البنيوية
Decorator - متى تستخدمهsubclassing) في انفجار عدد الأصنافconfigurable)الأنماط البنيوية
Decorator - مثال كودclass SimpleCoffee(Coffee):
def cost(self): return 2.0
def description(self): return "Simple coffee"
class Milk(CoffeeDecorator):
def cost(self):
return self._coffee.cost() + 0.5
def description(self):
return self._coffee.description() + ", milk"
coffee = Milk(SimpleCoffee())
print(f"{coffee.description()}: ${coffee.cost()}")
# Simple coffee, milk: $2.5Decorator يستدعي الكائن الذي يغلفه ثم يضيف فوقه.الأنماط البنيوية
Facade - الحدسHomeTheaterFacade
نقطة الدخول الوحيدة
DVDPlayer
SoundSystem
Projector
الأنماط البنيوية
Facade - متى تستخدمهAPIs) أو أنظمة فرعية معقدةclients) عن الأنظمة الفرعية المعقدةabstraction)الأنماط البنيوية
Facade - مثال كودclass HomeTheaterFacade:
def __init__(self):
self.dvd = DVDPlayer()
self.sound = SoundSystem()
self.projector = Projector()
def watch_movie(self, movie):
self.projector.on()
self.sound.on()
self.dvd.on()
self.dvd.play(movie)
theater = HomeTheaterFacade()
theater.watch_movie("The Matrix")theater.watch_movie نقطة دخول واحدة تنسق DVDPlayer وSoundSystem وProjector.Adapter: يجعل الواجهات غير المتوافقة تعمل معا دون تعديل الكود الموجودDecorator: يضيف سلوكا ديناميكيا، متجنبا انفجار عدد الأصناف الفرعيةFacade: يخفي تعقيد النظام الفرعي خلف واجهة واحدة بسيطةMahmoud Abas|الجزء الثاني: الأنماط البنيوية