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")