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.