Sobes.tech
Middle

Fasad nümunəsi (Facade) nədir?

sobes.tech Süni İntellekt

AI-dan cavab

Fasad (Facade) nümunəsi, siniflər, kitabxanalar və ya alt sistemlərdən ibarət mürəkkəb sistemə sadələşdirilmiş interfeys təmin edən struktur dizayn nümunəsidir. Alt sistemin tətbiq detalları gizlədir və tipik əməliyyatların yerinə yetirilməsi üçün tək giriş nöqtəsi təmin edir.

Məqsəd:

  • Mürəkkəb sistemin istifadəsini sadələşdirmək.
  • Müştəri və alt sistem arasındakı asılılıqları azaltmaq.
  • Alt sistemi dəyişikliklərə daha çevik etmək.

Struktur:

  • Fasad (Facade): Müştəri üçün sadə interfeys təmin edir. Sorğuları uyğun alt sistem obyektlərinə yönəldir.
  • Alt sistem sinifləri: Alt sistemin funksionallığını həyata keçirir. Fasad haqqında məlumatlı deyillər.

Python nümunəsi:

# Mürəkkəb alt sistem sinifləri
class AudioMixer:
    def __init__(self):
        print("AudioMixer: Başlatma...")

    def configure(self, type):
        print(f"AudioMixer: {type} üçün konfiqurasiya...")

    def set_volume(self, level):
        print(f"AudioMixer: Həcmi {level} olaraq təyin et...")

class VideoRenderer:
    def __init__(self):
        print("VideoRenderer: Başlatma...")

    def set_resolution(self, res):
        print(f"VideoRenderer: Həllini {res} olaraq təyin et...")

    def render(self, frame):
        print(f"VideoRenderer: Kadr {frame} render edilir...")

class SubtitleManager:
    def __init__(self):
        print("SubtitleManager: Başlatma...")

    def load(self, file):
        print(f"SubtitleManager: {file} faylından altyazıları yükləyir...")

    def sync(self):
        print("SubtitleManager: Altyazıları sinxronlaşdırır...")

# Fasad nümunəsi
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 konvertasiyasına başlama...")
        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): # Kadrların işlənməsinin simulasyonu
            self._video_renderer.render(i)
        self._audio_mixer.set_volume(5)
        print("VideoConverterFacade: Video konvertasiyası tamamlandı.\n")

# Müştəri kodu
# Fasad olmadan, müştəri
# birbaşa bütün alt sistem sinifləri ilə işləməli idi.
# mixer = AudioMixer()
# renderer = VideoRenderer()
# subtitles = SubtitleManager()
# ... çox sətir kod ...

# Fasad ilə, müştəri yalnız Fasad ilə işləyir
facade = VideoConverterFacade()
facade.convert_video("filmim")

Nə zaman istifadə etmək:

  • Mürəkkəb alt sistem üçün sadə interfeys təmin etmək istədikdə.
  • Müştərilər və alt sistem sinifləri arasında çoxlu asılılıqlar olduqda.
  • Alt sistemi qatlara bölmək üçün.

Üstünlüklər:

  • Alt sistemlə qarşılıqlı əlaqəni sadələşdirir.
  • Müştəri və alt sistem arasındakı əlaqəni azaldır.
  • Alt sistemi dəyişdirmək və ya dəyişdirmək asanlaşdırır.

Çatışmazlıqlar:

  • Fasad çox funksionallıq daxil edərsə, "Tanrı Objekti" (God Object) ola bilər.
  • Alt sistemin inkişaf etmiş istifadəçiləri üçün vacib olan detalları gizləyə bilər.

Ümumiyyətlə, Fasad kodu təşkil etmək və mürəkkəb sistemlərin oxunaqlığını və istifadə rahatlığını artırmaq üçün əlverişli bir yoldur.