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.