Sobes.tech
Middle

Fasade Deseni (Facade) nedir?

sobes.tech yapay zeka

AI'dan gelen yanıt

Fasade (Facade) deseni, karmaşık sınıf, kütüphane veya alt sistemlere basitleştirilmiş bir arayüz sağlayan yapısal bir tasarım desenidir. Alt sistemin uygulama detaylarını gizler ve tipik işlemleri gerçekleştirmek için tek bir giriş noktası sağlar.

Amaç:

  • Karmaşık bir sistemin kullanımını basitleştirmek.
  • Müşteri ile alt sistem arasındaki bağımlılıkları azaltmak.
  • Alt sistemi değişikliklere karşı daha esnek hale getirmek.

Yapı:

  • Fasade (Facade): Müşteri için basit bir arayüz sağlar. Talepleri uygun alt sistem nesnelerine yönlendirir.
  • Alt Sistem Sınıfları: Alt sistemin işlevselliğini uygular. Fasade hakkında bilgi sahibi değildir.

Python ile Örnek:

# Karmaşık alt sistem sınıfları
class AudioMixer:
    def __init__(self):
        print("AudioMixer: Başlatılıyor...")

    def configure(self, type):
        print(f"AudioMixer: {type} için yapılandırılıyor...")

    def set_volume(self, level):
        print(f"AudioMixer: Ses seviyesi {level} olarak ayarlanıyor...")

class VideoRenderer:
    def __init__(self):
        print("VideoRenderer: Başlatılıyor...")

    def set_resolution(self, res):
        print(f"VideoRenderer: Çözünürlük {res} olarak ayarlanıyor...")

    def render(self, frame):
        print(f"VideoRenderer: Kare {frame} işleniyor...")

class SubtitleManager:
    def __init__(self):
        print("SubtitleManager: Başlatılıyor...")

    def load(self, file):
        print(f"SubtitleManager: Alt yazılar {file} dosyasından yükleniyor...")

    def sync(self):
        print("SubtitleManager: Alt yazılar senkronize ediliyor...")

# Fasade deseni
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 dönüştürme başlatılıyor...")
        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): # Kare işleme simülasyonu
            self._video_renderer.render(i)
        self._audio_mixer.set_volume(5)
        print("VideoConverterFacade: Video dönüştürme tamamlandı.\n")

# Müşteri kodu
# Fasade olmadan, müşteri
# doğrudan alt sistem sınıflarıyla etkileşime geçerdi.
# mixer = AudioMixer()
# renderer = VideoRenderer()
# subtitles = SubtitleManager()
# ... çok satır kod ...

# Fasade ile müşteri sadece Fasade ile etkileşir
facade = VideoConverterFacade()
facade.convert_video("filmim")

Ne zaman kullanmalı:

  • Karmaşık bir alt sistem için basit bir arayüz sağlamak istendiğinde.
  • Müşteriler ile alt sistem sınıfları arasında birçok bağımlılık olduğunda.
  • Alt sistemi katmanlara ayırmak için.

Avantajlar:

  • Alt sistem ile etkileşimi basitleştirir.
  • Müşteri ile alt sistem arasındaki bağımlılığı azaltır.
  • Alt sistemde değişiklik veya değişim kolaylığı sağlar.

Dezavantajlar:

  • Fasade, çok fazla işlevsellik içeriyorsa "Tanrı Nesnesi" haline gelebilir.
  • Alt sistemin gelişmiş kullanıcılarının ihtiyaç duyabileceği önemli detayları gizleyebilir.

Genel olarak, Fasade, kodu düzenlemenin ve karmaşık sistemlerin okunabilirliğini ve kullanılabilirliğini artırmanın uygun bir yoludur.