Sobes.tech
Middle

Mis on fassaadi muster (Facade)?

sobes.tech AI

Vastus AI-lt

"Fasáad" (Facade) on struktuuriline disainimuster, mis pakub lihtsustatud liidest keerulise klasside, teekide või subsüsteemi süsteemi jaoks. See varjab subsüsteemi teostamise üksikasju ja pakub ühe sisenemispunkti tüüpiliste toimingute täitmiseks.

Eesmärk:

  • Lihtsustada keerulise süsteemi kasutamist.
  • Vähendada sõltuvusi kliendi ja subsüsteemi vahel.
  • Muuta subsüsteem paindlikumaks muudatuste suhtes.

Struktuur:

  • Fasáad: Pakub lihtsat liidest kliendile. Edastab taotlused vastavatele subsüsteemi objektidele.
  • Subsüsteemi klassid: Teostavad subsüsteemi funktsionaalsust. Ei tea Fasáadist.

Näide Pythonis:

# Keerulise subsüsteemi klassid
class AudioMixer:
    def __init__(self):
        print("AudioMixer: Algatamine...")

    def configure(self, type):
        print(f"AudioMixer: Konfigureerimine {type} jaoks...")

    def set_volume(self, level):
        print(f"AudioMixer: Helitugevuse seadistamine {level}...")

class VideoRenderer:
    def __init__(self):
        print("VideoRenderer: Algatamine...")

    def set_resolution(self, res):
        print(f"VideoRenderer: Resolutsiooni seadistamine {res}...")

    def render(self, frame):
        print(f"VideoRenderer: Kaadri renderimine {frame}...")

class SubtitleManager:
    def __init__(self):
        print("SubtitleManager: Algatamine...")

    def load(self, file):
        print(f"SubtitleManager: Subtiitrite laadimine failist {file}...")

    def sync(self):
        print("SubtitleManager: Subtiitrite sünkroniseerimine...")

# Fasáad
class VideoConverterFacade:
    def __init__(self):
        self._audio_mixer = AudioMixer()
        self._video_renderer = VideoRenderer()
        self._subtitle_manager = SubtitleManager()

    def convert_video(self, filename):
        print("\nVideoConverterFacade: Video konversioon algab...")
        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): # Kadre töötlemise imitatsioon
            self._video_renderer.render(i)
        self._audio_mixer.set_volume(5)
        print("VideoConverterFacade: Video konversioon lõppes.\n")

# Klientkood
# Ilma Fasáadita peaks klient
# otse suhtlema kõigi subsüsteemi klassidega.
# mixer = AudioMixer()
# renderer = VideoRenderer()
# subtitles = SubtitleManager()
# ... palju koodi suhtluseks ...

# Fasáadiga suhtleb klient ainult Fasáadiga
facade = VideoConverterFacade()
facade.convert_video("my_movie")