{"id":1083,"date":"2023-03-16T14:17:48","date_gmt":"2023-03-16T13:17:48","guid":{"rendered":"https:\/\/maciej-klosinski.profesjonalnyprogramista.pl\/?p=1083"},"modified":"2023-03-20T23:38:56","modified_gmt":"2023-03-20T22:38:56","slug":"wzorzec-projektowy-fabryka","status":"publish","type":"post","link":"https:\/\/maciej-klosinski.profesjonalnyprogramista.pl\/index.php\/2023\/03\/16\/wzorzec-projektowy-fabryka\/","title":{"rendered":""},"content":{"rendered":"\n<h1 class=\"has-text-align-center has-black-color has-text-color wp-block-heading\">Wzorzec Projektowy Fabryka<\/h1>\n\n\n\n<p class=\"has-black-color has-text-color\">Wzorzec projektowania fabryka jest jednym z najpopularniejszych wzorc\u00f3w projektowania.<br>W skr\u00f3cie polega on na zdefiniowaniu interfejsu, kt\u00f3ry umo\u017cliwia tworzenie obiekt\u00f3w, a nast\u0119pnie na utworzeniu jednej lub kilku klas, kt\u00f3re implementuj\u0105 ten interfejs i s\u0142u\u017c\u0105 do tworzenia r\u00f3\u017cnych typ\u00f3w obiekt\u00f3w.<\/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\/pngegg.png\" alt=\"\" class=\"wp-image-1170\" width=\"256\" height=\"256\" srcset=\"https:\/\/maciej-klosinski.profesjonalnyprogramista.pl\/wp-content\/uploads\/2023\/03\/pngegg.png 512w, https:\/\/maciej-klosinski.profesjonalnyprogramista.pl\/wp-content\/uploads\/2023\/03\/pngegg-300x300.png 300w, https:\/\/maciej-klosinski.profesjonalnyprogramista.pl\/wp-content\/uploads\/2023\/03\/pngegg-150x150.png 150w\" sizes=\"auto, (max-width: 256px) 100vw, 256px\" \/><\/figure>\n<\/div>\n\n\n<p class=\"has-text-align-left wrapped-paragraph has-black-color has-text-color\">Wzorzec ten znacznie u\u0142atwia proces tworzenia obiekt\u00f3w, poniewa\u017c pozwala na skupienie si\u0119 na tworzeniu ich instancji zamiast na samych krokach tworzenia. To pozwala na bardziej elastyczny i efektywny spos\u00f3b projektowania oprogramowania.<\/p>\n\n\n\n<h2 class=\"has-text-align-center has-black-color has-text-color wp-block-heading\" style=\"font-size:32px\">Zasada dzia\u0142ania wzorca Fabryka<\/h2>\n\n\n\n<p class=\"has-black-color has-text-color\">Podstawow\u0105 ide\u0105 wzorca fabryka jest zdefiniowanie klasy, kt\u00f3ra ma na celu tworzenie obiekt\u00f3w innych klas. Ta klasa nazywana jest fabryk\u0105, poniewa\u017c jest odpowiedzialna za produkcj\u0119 obiekt\u00f3w. Aby zrealizowa\u0107 ten wzorzec projektowania, potrzebujemy trzech podstawowych element\u00f3w:<\/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 Fabryka<\/h2>\n\n\n\n<p class=\"has-black-color has-text-color\"><strong>Interfejs<\/strong> &#8211; to abstrakcyjna klasa lub interfejs, kt\u00f3ry definiuje metody, jakie musi zaimplementowa\u0107 klasa fabrykuj\u0105ca. Interfejs okre\u015bla r\u00f3wnie\u017c typ obiekt\u00f3w, kt\u00f3re ma zwraca\u0107 fabryka.<\/p>\n\n\n\n<p class=\"has-black-color has-text-color\"><strong>Klasa fabrykuj\u0105ca <\/strong>&#8211; to klasa, kt\u00f3ra implementuje interfejs i zawiera logik\u0119 tworzenia obiekt\u00f3w. Wzorzec ten mo\u017ce mie\u0107 wiele r\u00f3\u017cnych klas fabrykuj\u0105cych, kt\u00f3re mog\u0105 tworzy\u0107 r\u00f3\u017cne rodzaje obiekt\u00f3w.<\/p>\n\n\n\n<p class=\"has-black-color has-text-color\"><strong>Klasa konkretna<\/strong> &#8211; to klasa, kt\u00f3ra implementuje interfejs i zawiera logik\u0119 tworzenia obiektu. Ka\u017cda klasa konkretna jest tworzona przez klas\u0119 fabrykuj\u0105c\u0105 i musi zaimplementowa\u0107 metody interfejsu.<\/p>\n\n\n\n<p class=\"has-black-color has-text-color\">Wzorzec Fabryka mo\u017cna zaimplementowa\u0107 na r\u00f3\u017cne sposoby. Jednym z najprostszych jest stworzenie jednej klasy fabrykuj\u0105cej, kt\u00f3ra ma metody tworz\u0105ce konkretne obiekty. W ten spos\u00f3b, gdy chcemy doda\u0107 nowy typ obiektu, musimy jedynie zmieni\u0107 kod klasy fabrykuj\u0105cej.<\/p>\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 Fabryka<\/h2>\n\n\n\n<pre class=\"wp-block-code has-white-color has-text-color has-background\" style=\"background-color:#4e5156\"><code>\/\/ 1. Tworzymy interfejs Product, kt\u00f3ry b\u0119dzie implementowa\u0107 klasy konkretne\ninterface Product {\n    void printDescription();\n}\n\n\/\/ 2. Tworzymy klasy implementuj\u0105ce interfejs Product\nclass ProductA implements Product {\n    @Override\n    public void printDescription() {\n        System.out.println(\"Jestem produktem typu A\");\n    }\n}\n\nclass ProductB implements Product {\n    @Override\n    public void printDescription() {\n        System.out.println(\"Jestem produktem typu B\");\n    }\n}\n\n\/\/ 3. Tworzymy klas\u0119 Fabryka, kt\u00f3ra b\u0119dzie odpowiedzialna za tworzenie obiekt\u00f3w\nclass Factory {\n\/\/ 4. Metoda createProduct() tworzy nowy obiekt Product, zwracaj\u0105c go jako interfejs\n    public static Product createProduct(String type) {\n        if (type.equals(\"A\")) {\n            return new ProductA();\n        } else if (type.equals(\"B\")) {\n            return new ProductB();\n        } else {\n            throw new IllegalArgumentException(\"Nieznany typ produktu\");\n        }\n    }\n}\n\n\/\/ 5. Wykonanie programu we wzorcu Fabryka\npublic class Main {\n    public static void main(String&#91;] args) {\n        Product productA = Factory.createProduct(\"A\");\n        productA.printDescription(); \/\/ Wypisze: \"Jestem produktem typu A\"\n        \n        Product productB = Factory.createProduct(\"B\");\n        productB.printDescription(); \/\/ Wypisze: \"Jestem produktem typu B\"\n    }\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 Fabryka Wzorzec projektowania fabryka jest jednym z najpopularniejszych wzorc\u00f3w projektowania.W skr\u00f3cie polega on na zdefiniowaniu interfejsu, kt\u00f3ry umo\u017cliwia tworzenie obiekt\u00f3w, a nast\u0119pnie na utworzeniu jednej lub kilku klas, kt\u00f3re implementuj\u0105 ten interfejs i s\u0142u\u017c\u0105 do tworzenia r\u00f3\u017cnych typ\u00f3w obiekt\u00f3w. Wzorzec ten znacznie u\u0142atwia proces tworzenia obiekt\u00f3w, poniewa\u017c pozwala na skupienie si\u0119 na tworzeniu&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-1083","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\/1083","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=1083"}],"version-history":[{"count":6,"href":"https:\/\/maciej-klosinski.profesjonalnyprogramista.pl\/index.php\/wp-json\/wp\/v2\/posts\/1083\/revisions"}],"predecessor-version":[{"id":1175,"href":"https:\/\/maciej-klosinski.profesjonalnyprogramista.pl\/index.php\/wp-json\/wp\/v2\/posts\/1083\/revisions\/1175"}],"wp:attachment":[{"href":"https:\/\/maciej-klosinski.profesjonalnyprogramista.pl\/index.php\/wp-json\/wp\/v2\/media?parent=1083"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/maciej-klosinski.profesjonalnyprogramista.pl\/index.php\/wp-json\/wp\/v2\/categories?post=1083"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/maciej-klosinski.profesjonalnyprogramista.pl\/index.php\/wp-json\/wp\/v2\/tags?post=1083"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}