Sobes.tech
Middle

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

sobes.tech Süni İntellekt

AI-dan cavab

Fasad Patterni — bu strukturaviy dizayn naqshidir, u murakkab sinflar, ramkalar yoki funksiyalar to'plamiga oddiy interfeys taqdim etadi.

Asosiy maqsadlar:

  • Murakkab tizimdan foydalanishni soddalashtirish.
  • Mijoz va subsistema o'rtasidagi bog'liqlikni kamaytirish.
  • Kodni o'qilishi va saqlashni yaxshilash.

Ishlash prinsipi:

Fasad subsistema murakkabligini yashiradi, mijoz chaqiriqlarini subsistema ichidagi mos keladigan ob'ektlarga yo'naltiradi. Mijoz faqat fasad bilan o'zaro aloqada bo'ladi, ichki komponentlarning tafsilotlarini bilmaydi.

Misol:

# Subsistema: murakkab tizim komponentlarini ifodalaydigan sinflar
class Amplifier:
    def on(self):
        print("Amplifier yoqildi")

    def off(self):
        print("Amplifier o'chirildi")

    def set_volume(self, level):
        print(f"Amplifier hajmi {level} ga o'rnatildi")

    def set_source(self, source):
        print(f"Amplifier manbasi {source} ga o'rnatildi")

class Tuner:
    def on(self):
        print("Tuner yoqildi")

    def off(self):
        print("Tuner o'chirildi")

    def set_am(self):
        print("Tuner AM ga sozlandi")

    def set_fm(self):
        print("Tuner FM ga sozlandi")

    def set_frequency(self, frequency):
        print(f"Tuner chastotasi {frequency} ga o'rnatildi")

class DvdPlayer:
    def on(self):
        print("Dvd Player yoqildi")

    def off(self):
        print("Dvd Player o'chirildi")

    def play(self, movie):
        print(f"Film ijro etilmoqda: {movie}")

# Façad: oddiy interfeys taqdim etadi
class HomeTheaterFacade:
    def __init__(self, amp, tuner, dvd):
        self.amp = amp
        self.tuner = tuner
        self.dvd = dvd

    def watch_movie(self, movie):
        print("Film ko'rishga tayyorlaning...")
        self.dvd.on()
        self.amp.on()
        self.amp.set_source("DVD")
        self.amp.set_volume(5)
        self.dvd.play(movie)

    def end_movie(self):
        print("Uy kinoteatrini o'chirish...")
        self.dvd.off()
        self.amp.off()

# Mijoz tomonidan façaddan foydalanish
if __name__ == "__main__":
    amplifier = Amplifier()
    tuner = Tuner()
    dvd_player = DvdPlayer()

    home_theater = HomeTheaterFacade(amplifier, tuner, dvd_player)

    home_theater.watch_movie("Raiders of the Lost Ark")
    print("-" * 20)
    home_theater.end_movie()

Afzalliklar:

  • Soddalashtirish: Murakkab tizimni yashiradi.
  • Bog'liqlikni kamaytirish: Mijoz to'g'ridan-to'g'ri tizimning ko'plab sinflariga bog'liq emas.
  • O'qilishi yaxshilanadi: Mijoz kodi yanada tushunarli bo'ladi.
  • Yaxshi saqlash: Tizim ichidagi o'zgarishlar mijoz kodiga kamroq ta'sir qiladi.

Kamchiliklar:

  • Potensial kengayish: Agar façad juda katta bo'lsa, u "yog'li" bo'lib, boshqarish qiyin bo'lishi mumkin.
  • Moslashuvchanlik cheklovlari: Façad, oldindan belgilangan operatsiyalar to'plamini taqdim etadi. Ko'proq moslashuvchan ssenariylar uchun to'g'ridan-to'g'ri tizimga kirish zarur bo'lishi mumkin.

Qo'llanilishi:

Murakkab tizim bilan o'zaro aloqani soddalashtirish va yagona qilish zarur bo'lganda foydalaniladi.