{"id":1090,"date":"2023-03-16T14:45:00","date_gmt":"2023-03-16T13:45:00","guid":{"rendered":"https:\/\/maciej-klosinski.profesjonalnyprogramista.pl\/?p=1090"},"modified":"2023-03-20T23:39:00","modified_gmt":"2023-03-20T22:39:00","slug":"wzorzec-projektowy-fasada","status":"publish","type":"post","link":"https:\/\/maciej-klosinski.profesjonalnyprogramista.pl\/index.php\/2023\/03\/16\/wzorzec-projektowy-fasada\/","title":{"rendered":""},"content":{"rendered":"\n<h1 class=\"has-text-align-center has-black-color has-text-color wp-block-heading\">Wzorzec Projektowy Fasada<\/h1>\n\n\n\n<p class=\"has-black-color has-text-color\">Wzorzec projektowy Fasada to jeden z najprostszych wzorc\u00f3w projektowych, kt\u00f3ry pozwala na uproszczenie interakcji z z\u0142o\u017conym systemem, poprzez stworzenie prostego interfejsu dla u\u017cytkownika.<\/p>\n\n\n<div class=\"wp-block-image state-image box transparent\">\n<figure class=\"alignright size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/maciej-klosinski.profesjonalnyprogramista.pl\/wp-content\/uploads\/2023\/03\/facade.png\" alt=\"\" class=\"wp-image-1179\" width=\"243\" height=\"306\"\/><\/figure>\n<\/div>\n\n\n<p class=\"has-black-color has-text-color\">Implementacja wzorca Fasada polega na stworzeniu klasy fasady, kt\u00f3ra dostarcza prosty interfejs u\u017cytkownika do z\u0142o\u017conego systemu. Fasada ukrywa szczeg\u00f3\u0142y funkcjonowania systemu, a u\u017cytkownik korzysta tylko z prostych metod dostarczonych przez fasad\u0119.<\/p>\n\n\n\n<p class=\"has-black-color has-text-color\">W praktyce, klasa fasady tworzy &#8222;jedno okno&#8221; do z\u0142o\u017conego systemu, co pozwala u\u017cytkownikowi na korzystanie z r\u00f3\u017cnych funkcjonalno\u015bci bez potrzeby wiedzy na temat jego z\u0142o\u017conej struktury.<\/p>\n\n\n\n<p class=\"has-black-color has-text-color\">Dzi\u0119ki temu wzorzec Fasada pozwala na uproszczenie i usprawnienie kodu, a tak\u017ce na zmniejszenie zale\u017cno\u015bci mi\u0119dzy komponentami systemu. Dodatkowo, pozwala on na \u0142atwiejsze testowanie kodu, poniewa\u017c testowanie poszczeg\u00f3lnych funkcjonalno\u015bci systemu mo\u017ce odbywa\u0107 si\u0119 oddzielnie od testowania fasady.<\/p>\n\n\n\n<h2 class=\"has-text-align-center has-black-color has-text-color wp-block-heading\" style=\"font-size:32px\">Podstawowe elementy wzorca Fasada<\/h2>\n\n\n\n<p class=\"has-black-color has-text-color\"><strong><strong>Fasada<\/strong><\/strong> &#8211; czyli klasa, kt\u00f3ra udost\u0119pnia prosty interfejs u\u017cytkownikom, ukrywaj\u0105c wewn\u0119trzn\u0105 z\u0142o\u017cono\u015b\u0107 systemu.<\/p>\n\n\n\n<p class=\"has-black-color has-text-color\"><strong><strong>Klient<\/strong> <\/strong>&#8211; u\u017cytkownik lub inny element systemu korzystaj\u0105cy z fasady.<\/p>\n\n\n\n<p class=\"has-black-color has-text-color\"><strong><strong>Podsystem<\/strong> <\/strong> &#8211; z\u0142o\u017cona struktura systemu, kt\u00f3r\u0105 fasada upraszcza.<\/p>\n\n\n\n<p class=\"has-black-color has-text-color\"><strong>Metody Fasady<\/strong> &#8211; metody, kt\u00f3re udost\u0119pniaj\u0105 uproszczony interfejs dla klienta i wywo\u0142uj\u0105 odpowiednie metody w podsystemach w celu wykonania \u017c\u0105danych operacji.<\/p>\n\n\n\n<p class=\"has-black-color has-text-color\">Przyk\u0142adem zastosowania wzorca Fasada mo\u017ce by\u0107 system bankowy, gdzie fasada dostarcza prosty interfejs u\u017cytkownika do r\u00f3\u017cnych funkcjonalno\u015bci systemu, takich jak logowanie, przegl\u0105danie salda, dokonywanie przelew\u00f3w itp. Dzi\u0119ki fasadzie u\u017cytkownik nie musi zna\u0107 z\u0142o\u017conej struktury systemu bankowego, a jedynie korzysta z prostych i intuicyjnych metod dostarczanych przez fasad\u0119.<\/p>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"has-text-align-center has-black-color has-text-color wp-block-heading\" style=\"font-size:32px\">Przyk\u0142ad implementacji we wzorcu Fasada<\/h2>\n\n\n\n<pre class=\"wp-block-code has-white-color has-text-color has-background\" style=\"background-color:#4e5156\"><code>\/\/ Niech nasza aplikacja b\u0119dzie z\u0142o\u017conym systemem bankowym sk\u0142adaj\u0105cym si\u0119 z wielu klas, takich jak KontoBankowe, Przelew, KartaDebetowa itp. \nAby upro\u015bci\u0107 interakcj\u0119 u\u017cytkownika z tym systemem oraz oddzieli\u0107 go od kluczowych funkcji systemu tworzymy klas\u0119 fasady FasadaBanku, kt\u00f3ra b\u0119dzie udost\u0119pnia\u0142a prosty interfejs do tych klas.\n\npublic class KontoBankowe {\n    private int numerKonta;\n    private double saldo;\n\n    public KontoBankowe(int numerKonta, double saldo) {\n        this.numerKonta = numerKonta;\n        this.saldo = saldo;\n    }\n\n    public void wplac(double kwota) {\n        saldo += kwota;\n    }\n\n    public void wyplac(double kwota) {\n        saldo -= kwota;\n    }\n\n    public double getSaldo() {\n        return saldo;\n    }\n}\n\npublic class Przelew {\n    private int numerKontaZrodlowego;\n    private int numerKontaDocelowego;\n    private double kwota;\n\n    public Przelew(int numerKontaZrodlowego, int numerKontaDocelowego, double kwota) {\n        this.numerKontaZrodlowego = numerKontaZrodlowego;\n        this.numerKontaDocelowego = numerKontaDocelowego;\n        this.kwota = kwota;\n    }\n\n    public void wykonaj() {\n        \/\/ Kod wykonuj\u0105cy przelew\n    }\n}\n\npublic class KartaDebetowa {\n    private int numerKarty;\n    private double limit;\n\n    public KartaDebetowa(int numerKarty, double limit) {\n        this.numerKarty = numerKarty;\n        this.limit = limit;\n    }\n\n    public boolean czyMoznaPlacic(double kwota) {\n        return kwota &lt;= limit;\n    }\n\n    public void zaplac(double kwota) {\n        \/\/ Kod dokonuj\u0105cy p\u0142atno\u015bci kart\u0105 debetow\u0105\n    }\n}\n\npublic class FasadaBanku {\n    private KontoBankowe kontoBankowe;\n    private Przelew przelew;\n    private KartaDebetowa kartaDebetowa;\n\n    public FasadaBanku(KontoBankowe kontoBankowe, Przelew przelew, KartaDebetowa kartaDebetowa) {\n        this.kontoBankowe = kontoBankowe;\n        this.przelew = przelew;\n        this.kartaDebetowa = kartaDebetowa;\n    }\n\n    public void wplacNaKonto(double kwota) {\n        kontoBankowe.wplac(kwota);\n    }\n\n    public void wyplacZKonta(double kwota) {\n        kontoBankowe.wyplac(kwota);\n    }\n\n    public double sprawdzSaldo() {\n        return kontoBankowe.getSaldo();\n    }\n\n    public void wykonajPrzelew() {\n        przelew.wykonaj();\n    }\n\n    public boolean czyMoznaPlacicKarta(double kwota) {\n        return kartaDebetowa.czyMoznaPlacic(kwota);\n    }\n\n    public void zaplacKarta(double kwota) {\n        kartaDebetowa.zaplac(kwota);\n    }\n}<\/code><\/pre>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer wrapped-paragraph\"><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Wzorzec Projektowy Fasada Wzorzec projektowy Fasada to jeden z najprostszych wzorc\u00f3w projektowych, kt\u00f3ry pozwala na uproszczenie interakcji z z\u0142o\u017conym systemem, poprzez stworzenie prostego interfejsu dla u\u017cytkownika. Implementacja wzorca Fasada polega na stworzeniu klasy fasady, kt\u00f3ra dostarcza prosty interfejs u\u017cytkownika do z\u0142o\u017conego systemu. Fasada ukrywa szczeg\u00f3\u0142y funkcjonowania systemu, a u\u017cytkownik korzysta tylko z prostych metod dostarczonych&hellip;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[10],"tags":[],"class_list":["post-1090","post","type-post","status-publish","format-standard","hentry","category-artykkuly"],"_links":{"self":[{"href":"https:\/\/maciej-klosinski.profesjonalnyprogramista.pl\/index.php\/wp-json\/wp\/v2\/posts\/1090","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/maciej-klosinski.profesjonalnyprogramista.pl\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/maciej-klosinski.profesjonalnyprogramista.pl\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/maciej-klosinski.profesjonalnyprogramista.pl\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/maciej-klosinski.profesjonalnyprogramista.pl\/index.php\/wp-json\/wp\/v2\/comments?post=1090"}],"version-history":[{"count":5,"href":"https:\/\/maciej-klosinski.profesjonalnyprogramista.pl\/index.php\/wp-json\/wp\/v2\/posts\/1090\/revisions"}],"predecessor-version":[{"id":1187,"href":"https:\/\/maciej-klosinski.profesjonalnyprogramista.pl\/index.php\/wp-json\/wp\/v2\/posts\/1090\/revisions\/1187"}],"wp:attachment":[{"href":"https:\/\/maciej-klosinski.profesjonalnyprogramista.pl\/index.php\/wp-json\/wp\/v2\/media?parent=1090"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/maciej-klosinski.profesjonalnyprogramista.pl\/index.php\/wp-json\/wp\/v2\/categories?post=1090"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/maciej-klosinski.profesjonalnyprogramista.pl\/index.php\/wp-json\/wp\/v2\/tags?post=1090"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}