b'\n_START_ARTICLE_\nPy\xc5\x82ek (wzorzec projektowy)\n_START_SECTION_\nPrzyk\xc5\x82adowe zastosowanie\n_START_PARAGRAPH_\nWzorzec Py\xc5\x82ek stosuje si\xc4\x99 tam, gdzie jedna klasa ma wiele egzemplarzy, a ka\xc5\xbcdy z tych egzemplarzy mo\xc5\xbce by\xc4\x87 sterowany w ten sam spos\xc3\xb3b. Przyk\xc5\x82adowo ten\xc5\xbce wzorzec mo\xc5\xbcna zastosowa\xc4\x87 w programie wspomagaj\xc4\x85cym modelowanie przestrzenne terenu. Jednym z wielu element\xc3\xb3w, kt\xc3\xb3re musz\xc4\x85 si\xc4\x99 w nim znale\xc5\xba\xc4\x87 s\xc4\x85 obiekt reprezentuj\xc4\x85cy drzewo. Zak\xc5\x82adamy, \xc5\xbce obiekt taki posiada informacje o wygl\xc4\x85dzie drzewa oraz jakie\xc5\x9b inne jego cechy, przy czym tak\xc5\xbce jego wysoko\xc5\x9bci oraz jego wsp\xc3\xb3\xc5\x82rz\xc4\x99dne po\xc5\x82o\xc5\xbcenia. Podczas modelowania wielkich kompleks\xc3\xb3w zieleni z\xc5\x82o\xc5\xbconych z wielu egzemplarzy drzewa program mo\xc5\xbce zacz\xc4\x85\xc4\x87 dzia\xc5\x82a\xc4\x87 niezadowalaj\xc4\x85co wolno. Aby upora\xc4\x87 si\xc4\x99 z takim problemem mo\xc5\xbcna zastosowa\xc4\x87 wzorzec Py\xc5\x82ek. Po zastosowaniu tego wzorca projektowego zamiast tworzy\xc4\x87 indywidualny egzemplarz klasy (obiekt) dla ka\xc5\xbcdego drzewa mo\xc5\xbcliwe jest stworzenie kompleksowego obiektu, kt\xc3\xb3ry b\xc4\x99dzie w sobie zawiera\xc5\x82 informacje o wszystkich drzewach renderowanych na modelowanym terenie. W takim obiekcie z racji tego, \xc5\xbce wszystkie renderowane drzewa maj\xc4\x85 pewne cechy wsp\xc3\xb3lne, takie jak np. wygl\xc4\x85d, informacje te b\xc4\x99d\xc4\x85 zapisane tylko raz (cho\xc4\x87 drzew mo\xc5\xbce by\xc4\x87 tysi\xc4\x85ce), a zwielokrotniane b\xc4\x99d\xc4\x85 jedynie informacje r\xc3\xb3\xc5\xbcne dla ka\xc5\xbcdego drzewa tak jak np. wsp\xc3\xb3\xc5\x82rz\xc4\x99dne i wysoko\xc5\x9b\xc4\x87. Spos\xc3\xb3b wykonania tej idei oraz jej implementacja zale\xc5\xbcy od woli programisty.\n_START_SECTION_\nStruktura wzorca\n_START_PARAGRAPH_\nIstot\xc4\x85 wzorca jest podzia\xc5\x82 danych przechowywanych w ci\xc4\x99\xc5\xbckim obiekcie na wewn\xc4\x99trzne i zewn\xc4\x99trzne. Do klasy danych wewn\xc4\x99trznych wybierane s\xc4\x85 te sk\xc5\x82adowe ci\xc4\x99\xc5\xbckiej klasy pierwotnej, kt\xc3\xb3rych warto\xc5\x9bci cz\xc4\x99sto si\xc4\x99 powtarzaj\xc4\x85. Pozosta\xc5\x82e sk\xc5\x82adowe stanowi\xc4\x85 dane zewn\xc4\x99trzne. Po ustaleniu podzia\xc5\x82u zamiast ci\xc4\x99\xc5\xbckich obiekt\xc3\xb3w wzorzec wprowadza odpowiadaj\xc4\x85ce im obiekty klient\xc3\xb3w oraz tzw. obiekty py\xc5\x82k\xc3\xb3w. Obiekty py\xc5\x82k\xc3\xb3w s\xc4\x85 tworzone z wybranych wcze\xc5\x9bniej danych wewn\xc4\x99trznych. Ka\xc5\xbcdy z nich jest wsp\xc3\xb3\xc5\x82dzielony przez wielu klient\xc3\xb3w i nie mo\xc5\xbcna go modyfikowa\xc4\x87. Dane zewn\xc4\x99trzne, unikatowe dla ka\xc5\xbcdego obiektu klienta, s\xc4\x85 dostarczane obiektowi py\xc5\x82ku poprzez okre\xc5\x9blone metody. Wzorzec zawiera dw\xc3\xb3ch uczestnik\xc3\xb3w - Fabryk\xc4\x99 Py\xc5\x82k\xc3\xb3w i Py\xc5\x82ek. Klient nie tworzy egzemplarzy typu Py\xc5\x82ek samodzielnie, a jedynie wysy\xc5\x82a do Fabryki \xc5\xbc\xc4\x85danie ich udost\xc4\x99pnienia. Fabryka zwraca Klientowi istniej\xc4\x85cy Py\xc5\x82ek lub tworzy nowy, je\xc5\x9bli \xc5\xbcaden egzemplarz tej klasy jeszcze nie istnieje.'