Sobes.tech
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), եթե շատ ֆունկցիոնալություն է պարունակում:
  • Կարող է թաքցնել կարևոր մանրամասներ, որոնք անհրաժեշտ են առաջադեմ օգտվողներին:

Ընդհանուր առմամբ, Ֆասադը հարմար միջոց է կոդի կազմակերպման և խճճված համակարգի ընթերցելիության և օգտագործման բարելավման համար։