Middle
Паттерни фасад (Facade) чист?
sobes.tech AI
Ҷавоб аз AI
Шаблони "Фасад" (Facade) — ин шеваи сохтори тарҳрезӣ мебошад, ки интерфейси соддаро ба системаи мураккаб аз синфҳо, китобхона ё подсистема пешниҳод мекунад. Детаҳои иҷрои подсистемаро пинҳон мекунад ва як нуқтаи воридот барои иҷрои амалиётҳои стандартӣ медиҳад.
Ҳадаф:
- Содда кардани истифодаи системаи мураккаб.
- Кам кардани вобастагиҳо байни муштарӣ ва подсистема.
- Гузариш додани подсистемаро барои тағйиротҳо бештар гуворо кардан.
Тарз:
- Фасад (Facade): Интерфейси соддаро барои муштарӣ пешниҳод мекунад. Дархостҳоро ба объектҳои мувофиқи подсистема месупорад.
- Классҳои подсистема (SubSystem Classes): Функсионалиятро иҷро мекунанд. Бо Фасад огоҳ нестанд.
Масалан дар Python:
# Классҳои подсистемаи мураккаб
class AudioMixer:
def __init__(self):
print("AudioMixer: Инициализация...")
def configure(self, type):
print(f"AudioMixer: Танзим барои {type}...")
def set_volume(self, level):
print(f"AudioMixer: Танзим кардани ҳаҷми овоз ба {level}...")
class VideoRenderer:
def __init__(self):
print("VideoRenderer: Инициализация...")
def set_resolution(self, res):
print(f"VideoRenderer: Танзим кардани ҳалли ба {res}...")
def render(self, frame):
print(f"VideoRenderer: Рендер кардани фрейм {frame}...")
class SubtitleManager:
def __init__(self):
print("SubtitleManager: Инициализация...")
def load(self, file):
print(f"SubtitleManager: Боркунии субтитрҳо аз {file}...")
def sync(self):
print("SubtitleManager: Синхронизатсия кардани субтитрҳо...")
# Маслиҳат барои фасад
class VideoConverterFacade:
def __init__(self):
self._audio_mixer = AudioMixer()
self._video_renderer = VideoRenderer()
self._subtitle_manager = SubtitleManager()
def convert_video(self, filename):
print("\nVideoConverterFacade: Оғози табдили видео...")
self._audio_mixer.configure("stereo")
self._video_renderer.set_resolution("1080p")
self._subtitle_manager.load(f"{filename}.srt")
self._subtitle_manager.sync()
for i in range(3): # Имитацияи коркарди кадрҳо
self._video_renderer.render(i)
self._audio_mixer.set_volume(5)
print("VideoConverterFacade: Табдили видео анҷом ёфт.\n")
# Код барои муштарӣ
# Бе фасад, муштарӣ бояд бо ҳамаи синфҳои подсистемаро мустақиман кор кунад.
# mixer = AudioMixer()
# renderer = VideoRenderer()
# subtitles = SubtitleManager()
# ... бисёр хатҳои код барои муошират ...
# Бо фасад, муштарӣ танҳо бо фасад кор мекунад
facade = VideoConverterFacade()
facade.convert_video("my_movie")
Вақте истифода бурдан:
- Вақте ки бояд интерфейси соддаро ба подсистемаи мураккаб пешниҳод кард.
- Вақте ки бисёр вобастагиҳо байни муштарӣ ва синфҳои подсистемаро вуҷуд дорад.
- Барои тақсим кардани подсистемаро ба қабатҳои мухталиф.
Афзалиятҳо:
- Корро бо подсистемаро содда мекунад.
- Вобастагиҳоро байни муштарӣ ва подсистема кам мекунад.
- Тағйирот ё иваз кардани подсистема осон мекунад.
Норасогиҳо:
- Фасад метавонад ба "объекти Худ" табдил ёбад, агар он хеле зиёда функсияҳоро дар бар гирад.
- Мумкин аст, ки тафсилоти муҳимро пинҳон кунад, ки барои корбарони пешрафта зарур бошанд.
Дар умум, фасад роҳи қулайи ташкил додани коди ва беҳтар кардани хонданпазирӣ ва истифодаи системаи мураккаб мебошад.