{"id":75,"date":"2023-03-10T09:35:35","date_gmt":"2023-03-10T08:35:35","guid":{"rendered":"http:\/\/krystian-surowiec.profesjonalnyprogramista.pl\/?p=75"},"modified":"2023-03-14T19:19:03","modified_gmt":"2023-03-14T18:19:03","slug":"builder","status":"publish","type":"post","link":"https:\/\/krystian-surowiec.profesjonalnyprogramista.pl\/?p=75","title":{"rendered":"Builder &#8211; Design Pattern"},"content":{"rendered":"\n<p class=\"has-text-align-left\">Wzorce Projektowe ang. Design Patterns, s\u0105 to uporz\u0105dkowane i sprawdzone w praktyce rozwi\u0105zania cz\u0119sto spotykanych problem\u00f3w programistycznych. Ich implementacja nie tylko rozwi\u0105zuje napotkany problem ale r\u00f3wnie\u017c u\u0142atwia komunikacj\u0119 w zespole oraz szybsze zrozumienie kodu przez innych programist\u00f3w.<\/p>\n\n\n\n<p>W przeciwie\u0144stwie do klasycznej formy konstruktora klasy, Builder pozwala w konstruktorze na wprowadzenie dowolnej ilo\u015bci argument\u00f3w, w dowolnej kolejno\u015bci. Takie rozwi\u0105zanie sprawdzi si\u0119 gdy klasa posiada du\u017c\u0105 ilo\u015b\u0107 p\u00f3l i nie chcemy tworzy\u0107 dla niej du\u017cej liczby konstruktor\u00f3w.<\/p>\n\n\n\n<p>Przyk\u0142adow\u0105 implementacj\u0105 wzorca projektowego Builder jest wykorzystanie klasy wewn\u0119trznej.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"alignright size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"508\" height=\"562\" src=\"https:\/\/krystian-surowiec.profesjonalnyprogramista.pl\/wp-content\/uploads\/2023\/03\/image.png\" alt=\"\" class=\"wp-image-88\" srcset=\"https:\/\/krystian-surowiec.profesjonalnyprogramista.pl\/wp-content\/uploads\/2023\/03\/image.png 508w, https:\/\/krystian-surowiec.profesjonalnyprogramista.pl\/wp-content\/uploads\/2023\/03\/image-271x300.png 271w, https:\/\/krystian-surowiec.profesjonalnyprogramista.pl\/wp-content\/uploads\/2023\/03\/image-105x116.png 105w\" sizes=\"auto, (max-width: 508px) 100vw, 508px\" \/><figcaption class=\"wp-element-caption\">Implementacja wzorca Builder z wykorzystaniem klasy wewn\u0119trznej<\/figcaption><\/figure>\n<\/div>\n\n\n<p>Klasa w kt\u00f3rej implementujemy Builder, posiada prywatne pola. W prywatnym konstruktorze klasy, jako argument przekazujemy obiekt klasy wewn\u0119trznej. Klasa posiada r\u00f3wnie\u017c &#8222;gettery&#8221;. <\/p>\n\n\n\n<p>Klasa wewn\u0119trzna, na naszym diagramie KlasaBuilder jest klas\u0105 publiczn\u0105                         i statyczn\u0105. Klasa wewn\u0119trzna posiada takie same pola jak klasa zewn\u0119trzna oraz s\u0105 one prywatne. Klasa wewn\u0119trzna posiada r\u00f3wnie\u017c metody, do kt\u00f3rych jako argumenty przekazywane s\u0105 konkretne warto\u015bci p\u00f3l klasy. Metody te zwracaj\u0105 typ klasy wewn\u0119trznej (KlasaBuilder), pozwala nam to \u0142\u0105czy\u0107 (&#8222;chainowa\u0107&#8221;)              w \u0142a\u0144cuch, dowolnie dost\u0119pne metody           w dowolnej kolejno\u015bci. Powoduje                    to  mo\u017cliwo\u015b\u0107 inicjalizacji p\u00f3l                            w konstruktorze w zale\u017cno\u015bci od naszych potrzeb. Po wywo\u0142aniu wybranych metod, wywo\u0142ujemy metod\u0119 build(), kt\u00f3ra zwraca nam utworzony obiekt o typie klasy zewn\u0119trznej.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Wzorce Projektowe ang. Design Patterns, s\u0105 to uporz\u0105dkowane i sprawdzone w praktyce rozwi\u0105zania cz\u0119sto spotykanych problem\u00f3w programistycznych. Ich implementacja nie tylko rozwi\u0105zuje napotkany problem ale r\u00f3wnie\u017c u\u0142atwia komunikacj\u0119 w zespole oraz szybsze zrozumienie kodu przez innych programist\u00f3w. W przeciwie\u0144stwie do klasycznej formy konstruktora klasy, Builder pozwala w konstruktorze na wprowadzenie dowolnej ilo\u015bci argument\u00f3w, w dowolnej &hellip; <\/p>\n<p class=\"link-more\"><a href=\"https:\/\/krystian-surowiec.profesjonalnyprogramista.pl\/?p=75\" class=\"more-link\">Read more<span class=\"screen-reader-text\"> &#8222;Builder &#8211; Design Pattern&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-75","post","type-post","status-publish","format-standard","hentry","category-bez-kategorii"],"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/krystian-surowiec.profesjonalnyprogramista.pl\/index.php?rest_route=\/wp\/v2\/posts\/75","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/krystian-surowiec.profesjonalnyprogramista.pl\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/krystian-surowiec.profesjonalnyprogramista.pl\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/krystian-surowiec.profesjonalnyprogramista.pl\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/krystian-surowiec.profesjonalnyprogramista.pl\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=75"}],"version-history":[{"count":8,"href":"https:\/\/krystian-surowiec.profesjonalnyprogramista.pl\/index.php?rest_route=\/wp\/v2\/posts\/75\/revisions"}],"predecessor-version":[{"id":99,"href":"https:\/\/krystian-surowiec.profesjonalnyprogramista.pl\/index.php?rest_route=\/wp\/v2\/posts\/75\/revisions\/99"}],"wp:attachment":[{"href":"https:\/\/krystian-surowiec.profesjonalnyprogramista.pl\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=75"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/krystian-surowiec.profesjonalnyprogramista.pl\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=75"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/krystian-surowiec.profesjonalnyprogramista.pl\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=75"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}