{"id":81,"date":"2023-07-26T08:41:50","date_gmt":"2023-07-26T06:41:50","guid":{"rendered":"https:\/\/demosites.io\/rokophoto-gb\/?p=1"},"modified":"2024-02-08T21:16:35","modified_gmt":"2024-02-08T20:16:35","slug":"wzorzec-projektowy-fasada","status":"publish","type":"post","link":"https:\/\/karol-kowalski.profesjonalnyprogramista.pl\/?p=81","title":{"rendered":"Wzorzec projektowy fasada"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Fasada (ang. Facade) umo\u017cliwia on stworzenie jednolitego interfejsu dla z\u0142o\u017conych system\u00f3w. W tym artykule om\u00f3wimy, dlaczego wzorzec Fasada jest u\u017cyteczny, jak dzia\u0142a, oraz przedstawimy przyk\u0142ad jego implementacji.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Dlaczego Fasada?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">W miar\u0119 rozwoju projektu oprogramowania, cz\u0119sto zaczynamy korzysta\u0107 z rozbudowanych system\u00f3w, kt\u00f3re sk\u0142adaj\u0105 si\u0119 z wielu komponent\u00f3w. W takiej sytuacji, zastosowanie wzorca Fasada pozwala na stworzenie jednolitego interfejsu, kt\u00f3ry ukrywa z\u0142o\u017cono\u015b\u0107 systemu i umo\u017cliwia \u0142atwe korzystanie z jego funkcji. Wzorzec ten wprowadza jedno miejsce, przez kt\u00f3re klient komunikuje si\u0119 z ca\u0142ym systemem, co zdecydowanie u\u0142atwia zrozumienie i u\u017cycie funkcji dost\u0119pnych w systemie.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Jak dzia\u0142a Fasada?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Wzorzec Fasada jest realizowany poprzez utworzenie klasy, zwanej fasad\u0105, kt\u00f3ra udost\u0119pnia uproszczony interfejs dla komunikacji z jednym lub wieloma podsystemami. Kluczowym jest to, \u017ce fasada ukrywa szczeg\u00f3\u0142y implementacyjne i z\u0142o\u017cono\u015b\u0107 systemu od klienta, dostarczaj\u0105c mu jednolitego punktu dost\u0119pu.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Podstawowe sk\u0142adniki wzorca Fasada to:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Fasada (Facade):<\/strong> Jest to klasa, kt\u00f3ra dostarcza prosty interfejs dla klienta, ukrywaj\u0105c z\u0142o\u017cono\u015b\u0107 systemu. Fasada koordynuje dzia\u0142anie r\u00f3\u017cnych podsystem\u00f3w.<\/li>\n\n\n\n<li><strong>Podsystemy (Subsystem):<\/strong> S\u0105 to klasy lub modu\u0142y, kt\u00f3re realizuj\u0105 konkretne funkcje w systemie. Fasada korzysta z podsystem\u00f3w, aby dostarczy\u0107 klientowi oczekiwane funkcje.<\/li>\n<\/ol>\n\n\n\n<h2 id=\"wp-block-themeisle-blocks-advanced-heading-5c359432\" class=\"wp-block-themeisle-blocks-advanced-heading wp-block-themeisle-blocks-advanced-heading-5c359432\">Implementacja wzorca<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">W tym przyk\u0142adzie, <code>AudioSystemFacade<\/code> jest fasad\u0105, kt\u00f3ra dostarcza prosty interfejs (<code>playMusic()<\/code> i <code>stopMusic()<\/code>) dla klienta. Fasada korzysta z r\u00f3\u017cnych podsystem\u00f3w (<code>AudioPlayer<\/code>, <code>Equalizer<\/code>, <code>Amplifier<\/code>), ukrywaj\u0105c ich z\u0142o\u017cono\u015b\u0107 i szczeg\u00f3\u0142y przed klientem. Klient nie musi zna\u0107 wewn\u0119trznej struktury systemu audio; wystarczy mu interfejs dostarczany przez fasad\u0119.<\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:100%\">\n<pre class=\"wp-block-code\"><code>\/\/ Podsystemy\nclass AudioPlayer {\n    void play() {\n        System.out.println(\"Playing audio\");\n    }\n}\n\nclass Equalizer {\n    void setEqualizer(int level) {\n        System.out.println(\"Setting equalizer level to \" + level);\n    }\n}\n\nclass Amplifier {\n    void setVolume(int volume) {\n        System.out.println(\"Setting volume to \" + volume);\n    }\n}\n\n\/\/ Fasada\nclass AudioSystemFacade {\n    private AudioPlayer audioPlayer;\n    private Equalizer equalizer;\n    private Amplifier amplifier;\n\n    public AudioSystemFacade() {\n        this.audioPlayer = new AudioPlayer();\n        this.equalizer = new Equalizer();\n        this.amplifier = new Amplifier();\n    }\n\n    \/\/ Prosty interfejs dla klienta\n    public void playMusic() {\n        audioPlayer.play();\n        equalizer.setEqualizer(2);\n        amplifier.setVolume(10);\n    }\n\n    public void stopMusic() {\n        System.out.println(\"Stopping music\");\n    }\n}\n\n\/\/ Klient\npublic class Client {\n    public static void main(String&#91;] args) {\n        \/\/ U\u017cycie fasady do obs\u0142ugi systemu audio\n        AudioSystemFacade audioSystem = new AudioSystemFacade();\n        audioSystem.playMusic();\n\n        \/\/ Dalsza interakcja z systemem audio za pomoc\u0105 fasady\n        audioSystem.stopMusic();\n    }\n}<\/code><\/pre>\n<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Fasada (ang. Facade) umo\u017cliwia on stworzenie jednolitego interfejsu dla z\u0142o\u017conych system\u00f3w. W tym artykule om\u00f3wimy, dlaczego wzorzec Fasada jest u\u017cyteczny, jak dzia\u0142a, oraz przedstawimy przyk\u0142ad jego implementacji. Dlaczego Fasada? W miar\u0119 rozwoju projektu oprogramowania, cz\u0119sto zaczynamy korzysta\u0107 z rozbudowanych system\u00f3w, kt\u00f3re sk\u0142adaj\u0105 si\u0119 z wielu komponent\u00f3w. W takiej sytuacji, zastosowanie wzorca Fasada pozwala na stworzenie&hellip;&nbsp;<a href=\"https:\/\/karol-kowalski.profesjonalnyprogramista.pl\/?p=81\" class=\"\" rel=\"bookmark\">Czytaj dalej &raquo;<span class=\"screen-reader-text\">Wzorzec projektowy fasada<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":714,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"neve_meta_sidebar":"","neve_meta_container":"","neve_meta_enable_content_width":"","neve_meta_content_width":70,"neve_meta_title_alignment":"","neve_meta_author_avatar":"","neve_post_elements_order":"","neve_meta_disable_header":"","neve_meta_disable_footer":"","neve_meta_disable_title":"","_themeisle_gutenberg_block_has_review":false,"_ti_tpc_template_sync":false,"_ti_tpc_template_id":"","footnotes":""},"categories":[4],"tags":[],"class_list":["post-81","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/karol-kowalski.profesjonalnyprogramista.pl\/index.php?rest_route=\/wp\/v2\/posts\/81","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/karol-kowalski.profesjonalnyprogramista.pl\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/karol-kowalski.profesjonalnyprogramista.pl\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/karol-kowalski.profesjonalnyprogramista.pl\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/karol-kowalski.profesjonalnyprogramista.pl\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=81"}],"version-history":[{"count":3,"href":"https:\/\/karol-kowalski.profesjonalnyprogramista.pl\/index.php?rest_route=\/wp\/v2\/posts\/81\/revisions"}],"predecessor-version":[{"id":710,"href":"https:\/\/karol-kowalski.profesjonalnyprogramista.pl\/index.php?rest_route=\/wp\/v2\/posts\/81\/revisions\/710"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/karol-kowalski.profesjonalnyprogramista.pl\/index.php?rest_route=\/wp\/v2\/media\/714"}],"wp:attachment":[{"href":"https:\/\/karol-kowalski.profesjonalnyprogramista.pl\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=81"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/karol-kowalski.profesjonalnyprogramista.pl\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=81"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/karol-kowalski.profesjonalnyprogramista.pl\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=81"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}