Sobes.tech
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")

Вақте истифода бурдан:

  • Вақте ки бояд интерфейси соддаро ба подсистемаи мураккаб пешниҳод кард.
  • Вақте ки бисёр вобастагиҳо байни муштарӣ ва синфҳои подсистемаро вуҷуд дорад.
  • Барои тақсим кардани подсистемаро ба қабатҳои мухталиф.

Афзалиятҳо:

  • Корро бо подсистемаро содда мекунад.
  • Вобастагиҳоро байни муштарӣ ва подсистема кам мекунад.
  • Тағйирот ё иваз кардани подсистема осон мекунад.

Норасогиҳо:

  • Фасад метавонад ба "объекти Худ" табдил ёбад, агар он хеле зиёда функсияҳоро дар бар гирад.
  • Мумкин аст, ки тафсилоти муҳимро пинҳон кунад, ки барои корбарони пешрафта зарур бошанд.

Дар умум, фасад роҳи қулайи ташкил додани коди ва беҳтар кардани хонданпазирӣ ва истифодаи системаи мураккаб мебошад.