{"id":217,"date":"2023-07-29T06:17:51","date_gmt":"2023-07-29T04:17:51","guid":{"rendered":"https:\/\/demosites.io\/rokophoto-gb\/?p=8"},"modified":"2023-12-27T21:27:43","modified_gmt":"2023-12-27T20:27:43","slug":"wzorzec-projektowy-fabryka","status":"publish","type":"post","link":"https:\/\/karol-kowalski.profesjonalnyprogramista.pl\/?p=217","title":{"rendered":"Wzorzec projektowy fabryka"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Wzorce projektowe s\u0105 kluczowym elementem w dziedzinie in\u017cynierii oprogramowania, pomagaj\u0105c programistom w rozwi\u0105zaniu powtarzalnych problem\u00f3w projektowych. Jednym z tych wzorc\u00f3w jest Fabryka (ang. Factory), kt\u00f3ry skupia si\u0119 na abstrakcji procesu tworzenia obiekt\u00f3w. W artykule tym om\u00f3wimy, dlaczego wzorzec Fabryka jest u\u017cyteczny, jak dzia\u0142a oraz zaprezentujemy prosty przyk\u0142ad implementacji w j\u0119zyku programowania.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Dlaczego Fabryka?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">W projektowaniu oprogramowania cz\u0119sto zetkni\u0119ci jeste\u015bmy z konieczno\u015bci\u0105 tworzenia obiekt\u00f3w r\u00f3\u017cnych klas, kt\u00f3re implementuj\u0105 t\u0119 sam\u0105 interfejs lub dziedzicz\u0105 po wsp\u00f3lnej klasie bazowej. W tym kontek\u015bcie wzorzec Fabryka staje si\u0119 niezwykle przydatny. Jego g\u0142\u00f3wnym celem jest dostarczenie jednego interfejsu do tworzenia obiekt\u00f3w, nie specyfikuj\u0105c dok\u0142adnie ich klas. W ten spos\u00f3b, programista mo\u017ce zmienia\u0107 typ tworzonego obiektu bez zmiany reszty kodu.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Jak dzia\u0142a Fabryka?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Wzorzec Fabryka skupia si\u0119 na separacji procesu tworzenia obiektu od reszty kodu. W skr\u00f3cie, tworzymy interfejs fabryki, kt\u00f3ry definiuje metod\u0119 do tworzenia obiekt\u00f3w, a nast\u0119pnie ka\u017cda konkretna fabryka implementuje t\u0119 metod\u0119, dostarczaj\u0105c konkretne instancje obiekt\u00f3w.<\/p>\n\n\n\n<h2 id=\"wp-block-themeisle-blocks-advanced-heading-9ade7c28\" class=\"wp-block-themeisle-blocks-advanced-heading wp-block-themeisle-blocks-advanced-heading-9ade7c28\">Przyk\u0142ad Implementacji<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">W tym przyk\u0142adzie, interfejs <code>VehicleFactory<\/code> zawiera jedn\u0105 metod\u0119 <code>createVehicle()<\/code>, kt\u00f3ra jest implementowana przez konkretne fabryki (<code>CarFactory<\/code> i <code>MotorcycleFactory<\/code>). Ka\u017cda fabryka jest odpowiedzialna za tworzenie jednego rodzaju obiektu (samochodu lub motocykla).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Interfejs <code>Vehicle<\/code> definiuje metod\u0119 <code>drive()<\/code>, kt\u00f3r\u0105 implementuj\u0105 konkretne produkty (<code>Car<\/code> i <code>Motorcycle<\/code>). Klient (<code>Client<\/code> class) u\u017cywa fabryk do uzyskania obiekt\u00f3w i nast\u0119pnie wywo\u0142uje na nich metod\u0119 <code>drive()<\/code>.<\/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>\/\/ Interfejs Fabryki\ninterface VehicleFactory {\n    Vehicle createVehicle();\n}\n\n\/\/ Interfejs Produktu\ninterface Vehicle {\n    String drive();\n}\n\n\/\/ Konkretne fabryki\nclass CarFactory implements VehicleFactory {\n    @Override\n    public Vehicle createVehicle() {\n        return new Car();\n    }\n}\n\nclass MotorcycleFactory implements VehicleFactory {\n    @Override\n    public Vehicle createVehicle() {\n        return new Motorcycle();\n    }\n}\n\n\/\/ Konkretne produkty\nclass Car implements Vehicle {\n    @Override\n    public String drive() {\n        return \"Driving a car\";\n    }\n}\n\nclass Motorcycle implements Vehicle {\n    @Override\n    public String drive() {\n        return \"Riding a motorcycle\";\n    }\n}\n\n\/\/ Klient\npublic class Client {\n    public static void main(String&#91;] args) {\n        \/\/ U\u017cycie fabryk do tworzenia obiekt\u00f3w\n        VehicleFactory carFactory = new CarFactory();\n        VehicleFactory motorcycleFactory = new MotorcycleFactory();\n\n        \/\/ Uzyskanie obiekt\u00f3w poprzez fabryki\n        Vehicle car = carFactory.createVehicle();\n        Vehicle motorcycle = motorcycleFactory.createVehicle();\n\n        \/\/ Wywo\u0142anie metody drive() na obiektach\n        System.out.println(car.drive());              \/\/ \"Driving a car\"\n        System.out.println(motorcycle.drive());       \/\/ \"Riding a motorcycle\"\n    }\n}<\/code><\/pre>\n<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Wzorce projektowe s\u0105 kluczowym elementem w dziedzinie in\u017cynierii oprogramowania, pomagaj\u0105c programistom w rozwi\u0105zaniu powtarzalnych problem\u00f3w projektowych. Jednym z tych wzorc\u00f3w jest Fabryka (ang. Factory), kt\u00f3ry skupia si\u0119 na abstrakcji procesu tworzenia obiekt\u00f3w. W artykule tym om\u00f3wimy, dlaczego wzorzec Fabryka jest u\u017cyteczny, jak dzia\u0142a oraz zaprezentujemy prosty przyk\u0142ad implementacji w j\u0119zyku programowania. Dlaczego Fabryka? W projektowaniu&hellip;&nbsp;<a href=\"https:\/\/karol-kowalski.profesjonalnyprogramista.pl\/?p=217\" class=\"\" rel=\"bookmark\">Czytaj dalej &raquo;<span class=\"screen-reader-text\">Wzorzec projektowy fabryka<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":712,"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":"[\"title\",\"thumbnail\",\"meta\",\"content\",\"tags\",\"comments\"]","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-217","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\/217","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=217"}],"version-history":[{"count":5,"href":"https:\/\/karol-kowalski.profesjonalnyprogramista.pl\/index.php?rest_route=\/wp\/v2\/posts\/217\/revisions"}],"predecessor-version":[{"id":702,"href":"https:\/\/karol-kowalski.profesjonalnyprogramista.pl\/index.php?rest_route=\/wp\/v2\/posts\/217\/revisions\/702"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/karol-kowalski.profesjonalnyprogramista.pl\/index.php?rest_route=\/wp\/v2\/media\/712"}],"wp:attachment":[{"href":"https:\/\/karol-kowalski.profesjonalnyprogramista.pl\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=217"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/karol-kowalski.profesjonalnyprogramista.pl\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=217"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/karol-kowalski.profesjonalnyprogramista.pl\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=217"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}