Sobes.tech
Middle

Fasad naqshasi (Facade) nima?

sobes.tech AI

AIdan javob

Fasad (Facade) naqshli qurilish shabloni bo'lib, u murakkab sinflar, kutubxona yoki subsistemga soddalashtirilgan interfeys taqdim etadi. U subsistemning amalga oshirish tafsilotlarini yashiradi va odatiy operatsiyalarni bajarish uchun yagona kirish nuqtasini taqdim etadi.

Maqsad:

  • Murakkab tizimdan foydalanishni soddalashtirish.
  • Mijoz va subsistem o'rtasidagi bog'liqliklarni kamaytirish.
  • Subsystemni o'zgarishlarga qarshi yanada moslashuvchan qilish.

Struktura:

  • Fasad (Facade): Mijoz uchun oddiy interfeys taqdim etadi. So'rovlarni mos subsistem obyektlariga yuboradi.
  • Subsystem sinflari: Subsystem funksionalligini amalga oshiradi. Fasadni bilmaydi.

Python misolida:

# Murakkab subsistem sinflari
class AudioMixer:
    def __init__(self):
        print("AudioMixer: Ishga tushirilmoqda...")

    def configure(self, type):
        print(f"AudioMixer: {type} uchun sozlamalar...")

    def set_volume(self, level):
        print(f"AudioMixer: Hajmni {level} ga sozlash...")

class VideoRenderer:
    def __init__(self):
        print("VideoRenderer: Ishga tushirilmoqda...")

    def set_resolution(self, res):
        print(f"VideoRenderer: Rezolyutsiya {res} ga sozlanmoqda...")

    def render(self, frame):
        print(f"VideoRenderer: Frame {frame} ni chizish...")

class SubtitleManager:
    def __init__(self):
        print("SubtitleManager: Ishga tushirilmoqda...")

    def load(self, file):
        print(f"SubtitleManager: Subtitrlar {file} dan yuklanmoqda...")

    def sync(self):
        print("SubtitleManager: Subtitrlarni sinxronlashtirish...")

# Fasad naqsh
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 konvertatsiyasini boshlash...")
        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): # Kadrlarni ishlashni simulyatsiya qilish
            self._video_renderer.render(i)
        self._audio_mixer.set_volume(5)
        print("VideoConverterFacade: Video konvertatsiyasi tugadi.\n")

# Mijoz kodi
# Fasad bo'lmasa, mijoz
# to'g'ridan-to'g'ri barcha subsistem sinflari bilan ishlashardi.
# mixer = AudioMixer()
# renderer = VideoRenderer()
# subtitles = SubtitleManager()
# ... ko'p satr kod ...

# Fasad bilan, mijoz faqat Fasad bilan ishlaydi
facade = VideoConverterFacade()
facade.convert_video("mening_filmim")

Qachon foydalanish:

  • Murakkab subsistemga oddiy interfeys taqdim qilish kerak bo'lsa.
  • Mijozlar va subsistem sinflari o'rtasida ko'p bog'liqlik bo'lsa.
  • Subsystemni qatlamlarga bo'lish uchun.

Afzalliklar:

  • Subsystem bilan ishlashni soddalashtiradi.
  • Mijoz va subsistem o'rtasidagi bog'liqlikni kamaytiradi.
  • Subsystemni o'zgartirish yoki almashtirishni osonlashtiradi.

Kamchiliklar:

  • Fasad juda ko'p funksionallikni o'z ichiga olsa, "Xudoning obyekti" (God Object) bo'lib qolishi mumkin.
  • Subsystemning ilg'or foydalanuvchilari uchun muhim bo'lgan tafsilotlarni yashirishi mumkin.

Umuman olganda, Fasad kodni tashkil qilish va murakkab tizimlarning o'qilishi va foydalanishini yaxshilash uchun qulay usuldir.