Middle
Ի՞նչ է ֆասադի (Facade) նմուշը։
sobes.tech AI
Պատասխան AI-ից
Ֆասադի (Facade) նմուշը կառուցվածքային դիզայնի նմուշ է, որը տրամադրում է պարզեցված ինտերֆեյս խճճված դասերի, գրադարանի կամ ենթակառուցվածքի համար: Այն թաքցնում է ենթակառուցվածքի իրականացման մանրամասները և տրամադրում մեկ մուտքի կետ՝ սովորական գործողությունների կատարման համար:
Նպատակը:
- Պարզեցնել խճճված համակարգի օգտագործումը:
- Կրճատել հաճախորդի և ենթակառուցվածքի միջև կախվածությունները:
- Գործառույթը դարձնել ավելի ճկուն փոփոխությունների նկատմամբ:
Կառուցվածքը:
- Ֆասադ (Facade): Պահպանում է պարզ ինտերֆեյս հաճախորդի համար: Դելեգատոր է պահանջները համապատասխան ենթակառուցվածքի օբյեկտներին:
- Սուբսիստեմի դասեր (SubSystem Classes): Իրականացնում են ենթակառուցվածքի ֆունկցիոնալությունը: Չեն գիտակցում Ֆասադի մասին:
Python-ի օրինակ:
# Սուբսիստեմի դասեր
class AudioMixer:
def __init__(self):
print("AudioMixer: Արժեքավորում...")
def configure(self, type):
print(f"AudioMixer: Կարգավորում {type} համար...")
def set_volume(self, level):
print(f"AudioMixer: Հնչողության մակարդակ սահմանում {level}...")
class VideoRenderer:
def __init__(self):
print("VideoRenderer: Արժեքավորում...")
def set_resolution(self, res):
print(f"VideoRenderer: Հ Resolution սահմանում {res}...")
def render(self, frame):
print(f"VideoRenderer: Ֆրեյմի ռենդեր {frame}...")
class SubtitleManager:
def __init__(self):
print("SubtitleManager: Արժեքավորում...")
def load(self, file):
print(f"SubtitleManager: Տիտղոսների բեռնում {file}...")
def sync(self):
print("SubtitleManager: Տիտղոսների սինխրոնիզացիա...")
# Ֆասադ մոդել
class VideoConverterFacade:
def __init__(self):
self._audio_mixer = AudioMixer()
self._video_renderer = VideoRenderer()
self._subtitle_manager = SubtitleManager()
def convert_video(self, filename):
print("\nVideoConverterFacade: Վիդեո փոխարկում սկսվեց...")
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): # Ֆրեյմների մշակման իմիտացիա
self._video_renderer.render(i)
self._audio_mixer.set_volume(5)
print("VideoConverterFacade: Վիդեո փոխարկումը ավարտվեց.\n")
# Հաճախորդի կոդ
# Ֆասադի բացակայության դեպքում հաճախորդը պետք է աշխատի
# բոլոր դասերի հետ ուղղակի:
# mixer = AudioMixer()
# renderer = VideoRenderer()
# subtitles = SubtitleManager()
# ... շատ կոդեր փոխազդեցության համար ...
# Ֆասադով հաճախորդը աշխատում է միայն Ֆասադի հետ
facade = VideoConverterFacade()
facade.convert_video("my_movie")
Երբ օգտագործել:
- Երբ անհրաժեշտ է տրամադրել պարզ ինտերֆեյս խճճված ենթակառուցվածքին:
- Երբ հաճախորդների և ենթակառուցվածքի դասերի միջև շատ կախվածություններ կան:
- Որպեսզի ենթակառուցվածքը բաժանվի շերտերի:
Առավելություններ:
- Պարզեցնում է փոխազդեցությունը ենթակառուցվածքի հետ:
- Կրճատում է հաճախորդի և ենթակառուցվածքի միջև կապը:
- Հեշտացնում է փոփոխությունը կամ փոխարինումը:
Մակարդակներ:
- Ֆասադը կարող է դառնալ "Աստծո օբյեկտ" (God Object), եթե շատ ֆունկցիոնալություն է պարունակում:
- Կարող է թաքցնել կարևոր մանրամասներ, որոնք անհրաժեշտ են առաջադեմ օգտվողներին:
Ընդհանուր առմամբ, Ֆասադը հարմար միջոց է կոդի կազմակերպման և խճճված համակարգի ընթերցելիության և օգտագործման բարելավման համար։