Cyfroteka.pl

klikaj i czytaj online

Cyfro
Czytomierz
00291 009105 10486309 na godz. na dobę w sumie
PHP. Wzorce projektowe - książka
PHP. Wzorce projektowe - książka
Autor: Liczba stron: 304
Wydawca: Helion Język publikacji: polski
ISBN: 978-83-246-7455-8 Data wydania:
Lektor:
Kategoria: ebooki >> komputery i informatyka >> webmasterstwo >> php - programowanie
Porównaj ceny (książka, ebook, audiobook).

Ciągły rozwój języka PHP sprawia, że za jego pomocą można już tworzyć bardzo zaawansowane aplikacje. Wszyscy programiści wiedzą, że wraz ze wzrostem skomplikowania tworzonego oprogramowania konieczne staje się zastosowanie sprawdzonych, przemyślanych i przetestowanych rozwiązań. Takim zbiorem najlepszych metod rozwiązywania typowych problemów są wzorce projektowe. Zawitały one również do świata PHP!

Na rynku znajdziesz wiele książek poświęconych wzorcom projektowym, jednak dotyczą one zazwyczaj języków Java lub C. Ta wyjątkowa książka zajmuje się wzorcami w języku PHP. W trakcie lektury poznasz podstawowe założenia programowania obiektowego, wzorce czynnościowe, kreacyjne i strukturalne. Przekonasz się też, jak bardzo wzrośnie jakość Twojego kodu, jeżeli do komunikacji z bazą danych MySQL zastosujesz wzorzec Proxy. Książka ta jest obowiązkową lekturą każdego programisty piszącego w języku PHP. Zobacz, jak dobry może być Twój kod!

Wzorce projektowe w PHP to:

Przekonaj się, jak tworzyć kod wysokiej jakości!



Znajdź podobne książki Ostatnio czytane w tej kategorii

Darmowy fragment publikacji:

Tytuł oryginału: Learning PHP Design Patterns Tłumaczenie: Jakub Hubisz ISBN: 978-83-246-7455-8 © 2013 Helion S.A. Authorized Polish translation of the English edition of Learning PHP Design Patterns, ISBN 9781449344917 © 2013 William B. Sanders. This translation is published and sold by permission of O’Reilly Media, Inc., which owns or controls all rights to publish and sell the same. All rights reserved. No part of this book may be reproduced or transmitted in any form or by any means, electronic or mechanical, including photocopying, recording or by any information storage retrieval system, without permission from the Publisher. Wszelkie prawa zastrzeżone. Nieautoryzowane rozpowszechnianie całości lub fragmentu niniejszej publikacji w jakiejkolwiek postaci jest zabronione. Wykonywanie kopii metodą kserograficzną, fotograficzną, a także kopiowanie książki na nośniku filmowym, magnetycznym lub innym powoduje naruszenie praw autorskich niniejszej publikacji. Wszystkie znaki występujące w tekście są zastrzeżonymi znakami firmowymi bądź towarowymi ich właścicieli. Autor oraz Wydawnictwo HELION dołożyli wszelkich starań, by zawarte w tej książce informacje były kompletne i rzetelne. Nie biorą jednak żadnej odpowiedzialności ani za ich wykorzystanie, ani za związane z tym ewentualne naruszenie praw patentowych lub autorskich. Autor oraz Wydawnictwo HELION nie ponoszą również żadnej odpowiedzialności za ewentualne szkody wynikłe z wykorzystania informacji zawartych w książce. Wydawnictwo HELION ul. Kościuszki 1c, 44-100 GLIWICE tel. 32 231 22 19, 32 230 98 63 e-mail: helion@helion.pl WWW: http://helion.pl (księgarnia internetowa, katalog książek) Drogi Czytelniku! Jeżeli chcesz ocenić tę książkę, zajrzyj pod adres http://helion.pl/user/opinie/phpwzo Możesz tam wpisać swoje uwagi, spostrzeżenia, recenzję. Pliki z przykładami omawianymi w książce można znaleźć pod adresem: ftp://ftp.helion.pl/przyklady/phpwzo.zip Printed in Poland. • Kup książkę • Poleć książkę • Oceń książkę • Księgarnia internetowa • Lubię to! » Nasza społeczność Spis treļci Przedmowa ............................................................................................................................. 13 I Wstýp do wzorców projektowych..........................................................19 W jaki sposób uäatwiè rozwiñzywanie problemów? Modularyzacja Klasy i obiekty Wstöp do Ĉrednio zaawansowanego i zaawansowanego programowania Dlaczego programowanie zorientowane obiektowo? 1. PHP a programowanie obiektowe............................................................................... 21 21 22 22 23 23 24 24 25 28 28 29 29 29 30 30 Zasada jednej odpowiedzialnoĈci Konstruktory w PHP Klient jako klasa Ĕñdajñca Co z wydajnoĈciñ? SzybkoĈè tworzenia i modyfikacji rozwiñzaþ SzybkoĈè w zespole Problemy z programowaniem sekwencyjnym i proceduralnym Programowanie sekwencyjne Programowanie proceduralne Zapäaè teraz lub zapäaè potem Abstrakcja 2. Podstawowe zagadnienia programowania obiektowego.........................................33 33 34 35 37 38 39 Klasy abstrakcyjne WäaĈciwoĈci i metody abstrakcyjne Interfejsy Interfejsy i staäe Podpowiadanie typów: prawie typowanie 5 Poleć książkęKup książkę Enkapsulacja Enkapsulacja w Ĕyciu codziennym Zapewnienie enkapsulacji poprzez widocznoĈè Funkcje ustawiajñce i pobierajñce Dziedziczenie Polimorfizm Jedna nazwa, wiele implementacji Polimorfizm wbudowany we wzorcach projektowych Tylko spokojnie 41 41 42 44 46 47 49 50 50 Wprowadzenie do MVC Podstawowe zasady wzorców projektowych Pierwsza zasada wzorców projektowych Wykorzystanie typów interfejsowych przy podpowiadaniu typów Klasy abstrakcyjne i ich interfejsy Druga zasada wzorców projektowych Przykäad zäoĔonoĈci przy wykorzystaniu klienta Delegacja: róĔnica miödzy MA a JEST 3. Podstawowe zagadnienia wzorców projektowych ................................................... 51 51 53 54 54 55 58 58 61 61 62 63 63 63 64 Czym spowodowana jest koniecznoĈè powtórnego projektowania? Co siö zmienia? Czym róĔniñ siö wzorce projektowe od frameworków? Wzorce projektowe jako wielka Ĉciñga Organizacja wzorców projektowych Wybór wzorca projektowego Po co jözyk modelowania UML? Diagramy klas Symbole uczestnictwa Notacja relacji 4. Wykorzystanie UML-a we wzorcach projektowych ..................................................65 65 66 67 69 69 71 72 74 74 75 76 77 77 78 Diagramy obiektów Diagramy interakcji Rola diagramów i notacji w programowaniu obiektowym Narzödzia dla UML Inne diagramy UML Relacje asocjacji Relacje agregacji Relacje implementacji i dziedziczenia Relacje tworzenia Relacje wielokrotne 6 _ Spis treļci Poleć książkęKup książkę II Wzorce kreacyjne ....................................................................................79 Wprowadzanie zmian w klasach Praca z fabrykñ Klient Czym jest wzorzec Metoda Fabrykujñca? Kiedy korzystaè z Metody Fabrykujñcej Minimalistyczny przykäad 5. Wzorzec Metoda Fabrykujéca ..................................................................................... 81 81 82 83 83 85 86 86 87 88 89 90 91 91 92 93 94 95 96 Dodanie elementów graficznych Koordynowanie produktów Zmiany w produkcie tekstowym Zmiany w produkcie graficznym Dodanie nowych produktów i parametryzowanych Ĕñdaþ Jedna fabryka i wiele produktów Nowe fabryki Nowe produkty Klient z parametrem Klasy pomocnicze Diagram plików Produkty siö zmieniajñ, interfejs zostaw w spokoju Czym jest wzorzec Prototyp? Kiedy wykorzystaè wzorzec Prototyp Funkcja klonujñca Podczas klonowania konstruktor nie jest wywoäywany W funkcji konstruktora nie powinny byè wykonywane Ĕadne zadania 6. Wzorzec Prototyp.........................................................................................................99 99 99 100 102 103 103 103 106 107 107 108 111 113 114 115 Nowoczesna organizacja biznesowa Enkapsulacja w interfejsie Implementacje interfejsów Klient Wprowadzanie zmian, rozbudowa funkcjonalnoĈci Dynamiczne tworzenie instancji obiektów Dodanie do prototypu elementów obiektowych Minimalistyczny przykäad Badanie muszek owocówek Wzorzec Prototyp w Ĉwiecie PHP Spis treļci _ 7 Poleć książkęKup książkę III Wzorce strukturalne ..............................................................................117 Czym jest wzorzec Adapter? Kiedy wykorzystywaè wzorzec Adapter Wzorzec Adapter zaimplementowany przy wykorzystaniu dziedziczenia 7. Wzorzec Adapter.........................................................................................................119 119 120 122 122 126 126 133 Z komputerów osobistych na urzñdzenia mobilne Adaptery a zmiany Wzorzec Adapter zaimplementowany przy wykorzystaniu kompozycji Minimalistyczny przykäad adaptera klas: wymiana walut Co z opakowywaniem? Interfejs komponentu Interfejs dekoratora Konkretny komponent Konkretne dekoratory Klient Czym jest wzorzec Dekorator? Kiedy wykorzystywaè wzorzec Dekorator Minimalistyczny przykäad dekoratora 8. Wzorzec Dekorator .................................................................................................... 135 135 136 137 137 137 138 139 141 142 142 142 143 143 144 144 145 150 154 155 155 Dekoratory z wieloma komponentami Wiele konkretnych komponentów Konkretne komponenty z wieloma stanami i wartoĈciami Usäugi randkowe dla programistów Opakowywanie prymitywów Klasy i funkcje opakowujñce wbudowane w PHP Wzorce projektowe polegajñce na opakowywaniu Klasa Client przekazujñca dane z HTML Od nazwy zmiennej do instancji obiektu Dodawanie dekoracji Interfejs uĔytkownika (UI) w HTML IV Wzorce czynnoļciowe...........................................................................157 9. Wzorzec Metoda Szablonowa................................................................................... 159 159 160 Czym jest wzorzec Metoda Szablonowa? Kiedy wykorzystywaè wzorzec Metoda Szablonowa Wykorzystanie wzorca Metoda Szablonowa z obrazami i podpisami: minimalistyczny przykäad 160 161 161 Klasa abstrakcyjna Klasa konkretna 8 _ Spis treļci Poleć książkęKup książkę Klasa Client Zasada Hollywood Wykorzystanie Metody Szablonowej z innymi wzorcami projektowymi Zmniejszenie obowiñzków klienta Uczestnicy wzorca Metoda Szablonowa Uczestnicy wzorca Metoda Fabrykujñca Hak we wzorcu Metoda Szablonowa Ustawienie haka Implementacja haka Klasa Client i uruchomienie haka Maäy, ale potöĔny wzorzec Metoda Szablonowa 162 162 164 165 166 167 169 171 171 172 174 Kontekst jest najwaĔniejszy Stany Klasa Client wykonuje Ĕñdanie przez Context Czym jest wzorzec Stan? Kiedy korzystaè ze wzorca Stan Maszyna stanowa ćwiatäo wäñczone i wyäñczone: minimalistyczna implementacja wzorca 10. Wzorzec Stan...............................................................................................................175 175 176 177 178 178 181 182 183 183 184 186 187 188 189 189 190 192 197 198 Ustalenie szablonu stanów dla macierzy Przygotowanie interfejsu Kontekst Stany Klient wybiera ĈcieĔkö Wzorzec Stan a PHP Dodawanie stanów Zmiana interfejsu Zmiana stanów Aktualizacja klasy Context Zaktualizowana klasa Client Nawigator: wiöcej wyborów i komórek V MySQL i wzorce projektowe PHP .........................................................199 11. Uniwersalna klasa poĥéczeniowa i wykorzystanie wzorca Proxy dla bezpieczeħstwa.................................................................................................... 201 201 Prosty interfejs i klasa do poäñczeþ MySQL 202 202 204 Interfejs w ciñĔy Uniwersalna klasa poäñczeniowa MySQL i zmienne statyczne Prosty klient Spis treļci _ 9 Poleć książkęKup książkę Proxy zabezpieczajñce proces logowania Stworzenie formularza rejestracji Implementacja proxy logowania Proxy i bezpieczeþstwo w prawdziwym Ĉwiecie 204 205 209 214 Algorytmy enkapsulujñce RóĔnica miödzy wzorcami Strategia i Stan ēadnych poleceþ warunkowych, proszö Rodzina algorytmów 12. Elastyczny wzorzec projektowy Strategia.................................................................217 217 218 219 219 219 221 223 224 Klasa Client i skrypty wyzwalajñce Klasa Context i interfejs strategii Konkretne strategie Minimalistyczny wzorzec Strategia Rozszerzony wzorzec Strategia uwzglödniajñcy bezpieczeþstwo danych i parametryzowane algorytmy Klasa pomocnicza odpowiedzialna za bezpieczeþstwo danych Dodanie parametru do metody algorithm Tabela survey Moduäy wprowadzania danych Klasa Client wzywa pomocy Drobna, ale waĔna zmiana w klasie Context Konkretne strategie Elastyczny wzorzec Strategia 227 227 230 230 231 235 237 237 242 Podaj dalej ãaþcuch OdpowiedzialnoĈci w aplikacji pomocy technicznej 13. Wzorzec projektowy Ĥaħcuch Odpowiedzialnoļci...................................................245 245 247 247 251 256 256 261 265 ãaþcuch OdpowiedzialnoĈci i Ĕñdania w oparciu o datö Metoda Fabrykujñca wieþczy dzieäo Utworzenie i uzupeänienie tabeli odpowiedzi ãaþcuch OdpowiedzialnoĈci pomocy technicznej Zautomatyzowany ãaþcuch OdpowiedzialnoĈci i Metoda Fabrykujñca ãatwoĈè aktualizacji Wbudowane interfejsy Obserwatora Kiedy korzystaè ze wzorca Obserwator Wykorzystanie SPL we wzorcu Obserwator 14. Budowa systemu CMS za pomocé wzorca Obserwator...........................................267 267 268 269 270 270 271 SplSubject SplObserver SplObjectStorage 10 _ Spis treļci Poleć książkęKup książkę Konkretny podmiot SPL Konkretny obserwator SPL Klient SPL Czyste PHP i wzorzec Obserwator Implementacja klas abstrakcyjnych Subject i ConcreteSubject Interfejs Observer i wiele konkretnych obserwatorów Klient Budowa prostego systemu CMS Infrastruktura programu Obserwator dla wielu urzñdzeþ MyĈlenie obiektowe 271 272 273 274 274 276 277 278 279 283 294 Skorowidz .............................................................................................................................295 Spis treļci _ 11 Poleć książkęKup książkę 12 _ Spis treļci Poleć książkęKup książkę ROZDZIAĤ 5. Wzorzec Metoda Fabrykujéca Ruchy kobiet wywoäaäy wĈród pracowników fabryk wielkñ mobilizacjö, która zniszczyäa dawne wzorce. — Emma Bonino Projektowanie to metoda äñczenia formy i zawartoĈci. Projektowanie, jako dziedzina sztuki, ma wiele definicji; nie ma jednej definicji. Projektowanie moĔe byè sztukñ. Projektowanie moĔe byè estetyczne. Projektowanie jest bardzo proste, dlatego wäaĈnie jest takie skomplikowane. — Paul Rand Stwórz swojñ wäasnñ metodö. Nie polegaj Ĉlepo na mojej. WymyĈl coĈ, co sprawdzi siö dla Ciebie! Ale äam konwencje, bäagam. — Konstanty Stanisäawski Czym jest wzorzec Metoda Fabrykujéca? Jako czöĈè kategorii wzorców kreacyjnych wzorzec Metoda Fabrykujñca ma za zadanie coĈ tworzyè. W przypadku tego wzorca to coĈ to produkt niezwiñzany z klasñ, która go stwo- rzyäa. Aby zachowane zostaäo luĒne äñczenie, klient przesyäa Ĕñdanie przez fabrykö. Na- stöpnie fabryka tworzy Ĕñdany produkt. MoĔna teĔ powiedzieè, Ĕe Metoda Fabrykujñca uwalnia produkt od klienta wykonujñcego Ĕñdanie. Rysunek 5.1 przedstawia diagram klas dla wzorca. Klasa Client jest domyĈlna. Jak widaè na rysunku 5.1, Client przechowuje referencjö do klasy Creator (interfejs fabryki), dziöki której moĔe zaĔñdaè produktu graficznego lub tek- stowego. Nie tworzy instancji Ĕñdanego produktu. Instancje tworzone sñ w fabrykach kon- kretnych. WyobraĒ sobie, Ĕe na przyjöcie z okazji Halloween chcesz zamówiè czekoladowe babeczki z czarnym i pomaraþczowym lukrem. Dzwonisz do piekarza (creator), który robi dla Ciebie babeczki (product). Nie angaĔujesz siö w proces tworzenia obiektu, który zamó- wiäeĈ, a otrzymujesz gotowy produkt. Czym jest wzorzec Metoda Fabrykujéca? _ 81 Poleć książkęKup książkę Rysunek 5.1. Diagram klas zaimplementowanego wzorca Metoda Fabrykujñca Kiedy korzystaë z Metody Fabrykujécej Wzorce projektowe czöĈciowo wybiera siö na podstawie zmian, jakie chcesz wprowadzaè w przyszäoĈci w programie. Tabela 3.1 z rozdziaäu 3. pokazuje, Ĕe ten wzorzec powinien byè wykorzystywany, kiedy podklasa tworzonego obiektu moĔe siö zmieniaè. W przykäadach z tego rozdziaäu wszystkie podklasy interfejsu Project sñ zmienne — oznaczajñ róĔne kraje. Jak siö przekonasz, projekty to obiekty skäadajñce siö z tekstu (zapiski) lub grafiki (mapy). Na poczñtku zakäadamy, Ĕe programista nie wie, ile krajów moĔe pojawiè siö w programie. Innymi säowy, liczba i typy obiektów sñ nieznane. Klasa nie moĔe przewidzieè liczby obiektów, które bödzie musiaäa stworzyè, a wiöc nie chcemy, aby byäa z tymi obiektami silnie zwiñzana. JeĔeli klasa ma skoþczonñ i znanñ liczbö obiektów, które muszñ zostaè utworzone, moĔna napisaè jñ tak, aby obiekty byäy tworzone w przewidywalny sposób. Na przykäad: jeĔeli robisz aplikacjö mapy Ĉwiata z odröbnymi obiektami dla kaĔdego z siedmiu kontynentów, moĔesz byè pewien, Ĕe ta liczba nie ulegnie zmianie. Z drugiej strony, jeĔeli tworzysz stronö zawie- rajñcñ róĔne gatunki insektów, moĔesz byè pewien, Ĕe gatunki bödñ odkrywane, zmieniane, a czöĈè z nich wyginie w niedäugich odstöpach czasu. Produkt programistyczny, który poradzi sobie z takñ zmiennoĈciñ, musi byè bardzo elastyczny. WäaĈnie w takim projekcie powinieneĈ rozwaĔyè wykorzystanie wzorca projektowego Metoda Fabrykujñca. 82 _ Rozdziaĥ 5. Wzorzec Metoda Fabrykujéca Poleć książkęKup książkę Minimalistyczny przykĥad Pierwszy przykäad, rozpoczynajñcy naszñ pracö z wzorcem Metoda Fabrykujñca, zwraca tylko tekst. Wzorzec tworzony jest na potrzeby programu, w którym programista wie, Ĕe bödzie musiaä tworzyè obiekty tekstowe i graficzne dla projektu zawierajñcego mapy i notatki. Nie wie natomiast, ile dokäadnie par map i notatek bödzie potrzebnych, nie wie teĔ, co klient bö- dzie chciaä dodaè do programu. Powiedziano mu, Ĕe konieczne bödñ mapy w formie graficz- nej i opisujñcy je tekst. Na poczñtku tworzy skromny wzorzec Metoda Fabrykujñca, wyĈwie- tlajñcy na ekranie informacje tekstowe — czöĈè w formie „grafiki”, czöĈè w formie „tekstu”. JeĔeli rozwiñzanie zostanie zaprojektowane prawidäowo, nie bödzie problemu z przechowy- waniem dowolnej liczby obiektów. Praca z fabryké Pierwszy krok to stworzenie fabryki: interfejs Creator. W tej implementacji jako interfejs wy- korzystamy klasö abstrakcyjnñ. JeĔeli przyjrzymy siö bliĔej diagramowi klas, zauwaĔymy, Ĕe jedna z adnotacji zawiera metodö konkretnñ — startFactory(). Dziöki temu wiemy, Ĕe interfejs musi byè klasñ abstrakcyjnñ, a nie interfejsem — interfejsy mogñ zawieraè tylko metody abstrakcyjne. Projekt wymaga teĔ metody abstrakcyjnej factoryMethod(). W klasie abstrakcyjnej wszystkie takie metody muszñ byè abstrakcyjne; w innym przypadku bödñ traktowane jako konkretne. Plik Creator.php zawiera kod pierwszego uczestnika wzorca. ?php //Creator.php abstract class Creator { protected abstract function factoryMethod(); public function startFactory() { $mfg= $this- factoryMethod(); return $mfg; } } ? Zwróè uwagö, Ĕe adnotacje na diagramie wskazujñ, Ĕe metoda startFactory() musi zwracaè produkt. W implementacji metoda startFactory() oczekuje, Ĕe factoryMethod() zwróci obiekt produktu. W zwiñzku z tym konkretna implementacja metody factoryMethod() musi stworzyè instancjö obiektu implementowanego z interfejsu Product. Dwie konkretne klasy fabryk dziedziczñ po klasie Creator i implementujñ metodö factory- Method(). Implementacja metody factoryMethod() zwraca produkt graficzny lub tekstowy za poĈrednictwem metody klasy Product — getProperties(). Implementacje TextFactory i GraphicFactory zawierajñ nastöpujñce elementy: ?php //TextFactory.php include_once( Creator.php ); include_once( TextProduct.php ); class TextFactory extends Creator { protected function factoryMethod() { $product=new TextProduct(); return($product- getProperties()); Minimalistyczny przykĥad _ 83 Poleć książkęKup książkę } } ? ?php //GraphicFactory.php include_once( Creator.php ); include_once( GraphicProduct.php ); class GraphicFactory extends Creator { protected function factoryMethod() { $product=new GraphicProduct(); return($product- getProperties()); } } ? Obie implementacje sñ bardzo podobne — róĔniñ siö tylko tym, Ĕe jedna tworzy obiekt typu TextProduct, a druga — typu GraphicProduct. Produkt Drugi interfejs we wzorcu Metoda Fabrykujñca to Product. W naszej minimalistycznej im- plementacji wszystkie klasy implementujñce interfejs muszñ zaimplementowaè tylko jednñ metodö, getProperties(). ?php //Product.php interface Product { public function getProperties(); } ? Dziöki temu, Ĕe klasa nie ma wäaĈciwoĈci, moĔemy w klasach potomnych zdecydowaè, co dokäadnie chcemy zrobiè z metodñ getProperties(). W PHP, w którym sygnatura zawiera tylko nazwö i widocznoĈè, moĔemy dowolnie modyfikowaè metodö abstrakcyjnñ, wäñczajñc w to zwracanie wartoĈci — a jeĔeli tylko sygnatura siö zgadza, implementacja bödzie poprawna. W implementacji Metody Fabrykujñcej moĔna zaobserwowaè polimorfizm na przykäadzie metody getProperties(). Zostanie wykorzystana do zwrócenia tekstu lub grafiki, ale wie- my, Ĕe dopóki bödzie posiadaäa poprawnñ sygnaturö, bödzie dostarczaäa to, czego potrzebu- jemy. Dokäadnie ta sama metoda, getProperties(), posiada wiele (poli) róĔnych form (morf). W tym przypadku jedna z form zwraca tekst, a druga grafikö: ?php //TextProduct.php include_once( Product.php ); class TextProduct implements Product { private $mfgProduct; public function getProperties() { $this- mfgProduct= To jest tekst. ; return $this- mfgProduct; } } ? 84 _ Rozdziaĥ 5. Wzorzec Metoda Fabrykujéca Poleć książkęKup książkę MoĔesz pomyĈleè: „Wielka mi rzecz, to zwraca tylko zmiennñ tekstowñ”. Na razie jest to prawdñ. MoĔesz jednak w implementacji zawrzeè, co tylko chcesz, a Metoda Fabrykujñca stworzy to i zwróci do metody Client. Kiedy wiöc zobaczysz wynik „To jest tekst” lub „To jest grafika”, wyobraĒ sobie dowolny obiekt, który mógäbyĈ chcieè stworzyè. Kolejna imple- mentacja zwraca abstrakcyjnñ grafikö w formie tekstu: ?php //GraphicProduct.php include_once( Product.php ); class GraphicProduct implements Product { private $mfgProduct; public function getProperties() { $this- mfgProduct= To jest grafika. 3 ; return $this- mfgProduct; } } ? KaĔda z dwóch implementacji fabryki i produktu implementuje metody abstrakcyjne w celu stworzenia dwóch róĔnych fabryk i produktów, stosujñc siö do interfejsów. Klient Ostatnim uczestnikiem wzorca jest domyĈlny klient. Nie chcemy, aby klasa Client wysyäaäa Ĕñdania bezpoĈrednio do produktów. Chcemy natomiast, aby Ĕñdania byäy przesyäane przez interfejs Creator. PóĒniej, jeĔeli bödziemy dodawaè produkty lub fabryki, klient bödzie mógä wykonaè takie samo Ĕñdanie i uzyskaè o wiele szerszñ gamö produktów bez koniecznoĈci wprowadzania zmian w programie: ?php //Client.php include_once( GraphicFactory.php ); include_once( TextFactory.php ); class Client { private $someGraphicObject; private $someTextObject; public function __construct() { $this- someGraphicObject=new GraphicFactory(); echo $this- someGraphicObject- startFactory() . br / ; $this- someTextObject=new TextFactory(); echo $this- someTextObject- startFactory() . br / ; } } $worker=new Client(); ? JeĔeli wszystko zadziaäa tak jak powinno, otrzymasz wynik: To jest grafika. 3 To jest tekst. ZauwaĔ, Ĕe klient nie wykonaä Ĕadnego bezpoĈredniego Ĕñdania do produktu, a instancje uzyskuje poprzez fabrykö. WaĔne jest to, Ĕe klient pozostawia kwestie zwiñzane z charakte- rystykñ produktu poszczególnym implementacjom. Minimalistyczny przykĥad _ 85 Poleć książkęKup książkę Wprowadzanie zmian w klasach Najwiökszñ wartoĈciñ wzorców projektowych nie jest szybkoĈè wykonywania operacji, ale szybkoĈè tworzenia rozwiñzaþ. W prostych aplikacjach, takich jak przykäad wzorca Metoda Fabrykujñca, moĔe byè ciöĔko to zaobserwowaè. Kiedy jednak zaczniemy wprowadzaè zmiany, bödzie to lepiej widoczne. Dodanie elementów graficznych Pierwszym krokiem bödzie zmienienie produktu, tak aby äadowaä grafikö w dokumencie HTML. Samo w sobie dodawanie grafiki na stronie jest bardzo proste, ale kiedy Twój pro- gram PHP bödzie stawaä siö bardziej zäoĔony, moĔe siö to staè trudniejsze. PoniĔszy listing przedstawia zmodyfikowanñ klasö GraphicProduct: ?php //GraphicProduct.php include_once( Product.php ); class GraphicProduct implements Product { private $mfgProduct; public function getProperties() { $this- mfgProduct= !doctype html html head meta charset= UTF-8 / ; $this- mfgProduct.= title Fabryka map /title ; $this- mfgProduct.= /head body ; $this- mfgProduct.= img src= Mali.png width= 500 height= 500 / ; $this- mfgProduct.= /body /html ; return $this- mfgProduct; } } ? Po raz kolejny moĔesz zaobserwowaè polimorfizm. Ta sama metoda getProperties() otrzy- maäa zupeänie innñ implementacjö. Czy to oznacza, Ĕe klient bödzie musiaä zmieniè sposób wysyäania Ĕñdania? Nie, przy Ĕñdaniu grafiki opuszczane jest Ĕñdanie tekstu, zgodnie z po- niĔszym listingiem: ?php //Client.php include_once( GraphicFactory.php ); class Client { private $someGraphicObject; private $someTextObject; public function __construct() { $this- someGraphicObject=new GraphicFactory(); echo $this- someGraphicObject- startFactory() . br / ; } } $worker=new Client(); ? To proste Ĕñdanie jest identyczne jak w pierwszym przykäadzie. PoniewaĔ jednak zmieniä siö obiekt GraphicProduct, wynik dziaäania programu bödzie inny: 86 _ Rozdziaĥ 5. Wzorzec Metoda Fabrykujéca Poleć książkęKup książkę Rysunek 5.2. Obiekt graficzny z osadzonym tekstem Patrzñc na rysunek 5.2, moĔna zaobserwowaè, Ĕe rysunek zawiera tekst, jednak ten tekst jest czöĈciñ obrazka, a nie tekstem zawartym w dokumencie HTML. Koordynowanie produktów Pobieranie produktów w PHP nie jest trudne, jednak kiedy strona bödzie siö rozrastaè i stanie siö bardziej zäoĔona, maksymalne uäatwienie procesu wprowadzania zmian bödzie bardzo istotne. Kolejnym krokiem bödzie zmodyfikowanie tekstu i grafiki tak, aby mogäy zostaè umiesz- czone razem w dokumencie. Jak widaè na rysunku 5.2, tekst zostaä wklejony w obrazek, wiöc zmiany pozwoliäy na poka- zanie, Ĕe obrazek moĔe zostaè zaäadowany bez koniecznoĈci wprowadzania zmian w Ĕñda- niach klasy Client. Czy to samo moĔna osiñgnñè, jeĔeli trzeba skoordynowaè wiöcej niĔ jeden produkt? Dziöki faktom dotyczñcym Mali pobranym ze stron CIA poäñczyliĈmy mapö i notatkö, zgod- nie z rysunkiem 5.3. Wprowadzanie zmian w klasach _ 87 Poleć książkęKup książkę Rysunek 5.3. Koordynacja obiektów tekstowego i graficznego Metoda Fabrykujñca pomaga uproĈciè wymagania rosnñcych i zwiökszajñcych poziom zäo- ĔonoĈci stron podczas wprowadzania i modyfikowania nowych produktów. Aby stworzyè stronö przedstawionñ na rysunku 5.3, musimy wprowadziè zmiany jedynie w produktach tekstowym i graficznym. Pozostali uczestnicy wzorca pozostajñ bez zmian — poniewaĔ Ĕñ- danie uzaleĔnione jest od interfejsów, a nie od klas konkretnych. Zmiany w produkcie tekstowym Zmiany wprowadzane w produkcie tekstowym sñ relatywnie proste. Zwracany produkt bödzie zawieraä formatowanie i nagäówek, ale do klienta wysyäajñcego Ĕñdanie zwracana jest ta sama zmienna, która jest wyĈwietlana na ekranie. PoniĔszy listing przedstawia zmiany wprowadzone w klasie TextProduct: ?php //TextProduct.php include_once( Product.php ); class TextProduct implements Product { private $mfgProduct; public function getProperties() { $this- mfgProduct = MALI !doctype html html head style type= text/css header { color: #900; 88 _ Rozdziaĥ 5. Wzorzec Metoda Fabrykujéca Poleć książkęKup książkę font-weight: bold; font-size: 24px; font-family: Verdana, Geneva, sans-serif; } p { font-family: Verdana, Geneva, sans-serif; font-size: 12px; } /style meta charset= UTF-8 title Mali /title /head body header Mali /header p W 1960 roku Republika Sudanu Francuskiego i Senegal zyskaĪy z rîk Francji ´niepodlegĪoŁð i przyjĂĪy wspólnî nazwĂ Federacji Mali. Kiedy po zaledwie kilku ´miesiîcach Senegal wystîpiĪ z federacji, Republika Sudanu Francuskiego pozostaĪa ´przy nazwie Mali. Rzîdy dyktatorskie zakoĬczyĪy siĂ w roku 1991 po militarnym ´zamachu stanu, który zaowocowaĪ okresem rzîdów demokratycznych. Pierwsze i drugie ´demokratyczne wybory prezydenckie w roku 1992 i 1997 wygraĪ Alpha KONARE. Poniewaš, ´zgodnie z konstytucjî Mali, prezydent moše sprawowað urzîd przez dwie kadencje, ´w roku 2001 Konare zakoĬczyĪ prezydenturĂ, a jego miejsce zajîĪ Amadou TOURE, który ´zostaĪ wybrany na drugî kadencjĂ w wyborach roku 2007, powszechnie uwašanych ´za wolne i uczciwe. W marcu 2012 r. wĪadzĂ przejĂĪa junta wojskowa, uwašajîca, še armia Mali nie ma ´wystarczajîcego wsparcia rzîdu w walce z kierowanymi przez Tuaregów rebeliantami ´z póĪnocy. Nacisk miĂdzynarodowy zmusiĪ przywódców puczu do przyŁpieszenia powrotu ´do demokracji i 12 kwietnia 2012 r. prezydentem zostaĪ Dioncounda TRAORE. /p /body /html MALI; return $this- mfgProduct; } } ? Zmiany w obiekcie tekstowym wydajñ siö byè duĔe, ale jedyna metoda getProperties() za- chowaäa ten sam interfejs i zwraca obiekt do fabryki. Format heredoc pozwala programistom na zawarcie kodu HTML bez koniecznoĈci otaczania kaĔdej linii cudzysäowami, a wewnñtrz zmiennej heredoc zmienne i staäe PHP sñ akceptowane (w podrozdziale „Klasy pomocnicze” zobaczysz, w jaki sposób klasa pomocnicza moĔe zajñè siö formatowaniem). Zmiany w produkcie graficznym Patrzñc na klasö GraphicProduct, zobaczymy tö samñ metodö i interfejs, które byäy wyko- rzystywane, gdy klasa zwracaäa tylko tekst symbolizujñcy grafikö: ?php //GraphicProduct.php include_once( Product.php ); class GraphicProduct implements Product { private $mfgProduct; public function getProperties() { $this- mfgProduct= img style= padding: 10px 10px 10px 0px ; src= Mali.png align= left width= 256 height= 274 ; return $this- mfgProduct; } } ? Wprowadzanie zmian w klasach _ 89 Poleć książkęKup książkę Podobnie jak w przypadku produktu tekstowego i magii polimorfizmu metoda getProperties() jest Ĕywotna jak karaluch. ēadne zmiany nie zostaäy wprowadzone w obiektach fabryki, a klasa Client wykonuje takie samo Ĕñdanie, zmieniajñc tylko rodzaj Ĕñdania z tekstu na grafikö. Dodanie nowych produktów i parametryzowanych Ŝédaħ Do tej pory pokazaäem, Ĕe zmiana grafiki i tekstu nie zaburzy dziaäania wzorca Metoda Fa- brykujñca, co jednak stanie siö, kiedy zaczniemy dodawaè wiöcej map i notatek? Czy ko- nieczne bödzie dodanie nowej klasy z konkretnej fabryki za kaĔdym razem, kiedy bödziemy chcieli dodaè nowy kraj? Oznaczaäoby to, Ĕe dla kaĔdego kraju konieczne bödzie stworzenie dwóch klas — fabryki i produktu. Czas przyjrzeè siö wzorcowi Metoda Fabrykujñca z para- metrami. Rysunek 5.4 przedstawia implementacjö takiego wzorca. Rysunek 5.4. Pojedyncza klasa Creator produkujñca wiele produktów Diagram z rysunku 5.4 róĔni siö w kilku szczegóäach od pierwotnego. Oba przedstawiajñ wzorzec Metoda Fabrykujñca i oba pozwalajñ osiñgnñè ten sam cel — róĔniñ siö jednak im- plementacjñ. Jednñ z gäównych róĔnic pomiödzy wzorcem z parametrami a wzorcem, który przedstawili- Ĉmy pierwotnie, jest to, Ĕe klient przechowuje referencje do fabryki i produktu. W parame- tryzowanym Ĕñdaniu musi nazwaè produkt, a nie tylko fabrykö produktów. Parametr meto- dy factoryMethod() reprezentuje produkt, który ma zostaè wyprodukowany — klient musi wiöc wskazaè, jaki dokäadnie produkt chce uzyskaè. ēñdanie nadal odbywa siö przez inter- fejs Creator. Mimo Ĕe klient przechowuje referencjö do produktu, nadal jest oddzielony od niego interfejsem Creator. 90 _ Rozdziaĥ 5. Wzorzec Metoda Fabrykujéca Poleć książkęKup książkę Jedna fabryka i wiele produktów W wiökszoĈci przypadków Metoda Fabrykujñca z parametrami jest mniej zäoĔona, poniewaĔ klient ma do czynienia tylko z jednñ konkretnñ fabrykñ. Metoda Fabrykujñca posiada jednñ metodö, która kieruje tworzeniem odpowiedniego produktu. W poprzednim przykäadzie kaĔdy produkt posiadaä swojñ fabrykö i nie byäo koniecznoĈci przekazywania parametrów. Aby zaimplementowaè wiöcej produktów za poĈrednictwem Metody Fabrykujñcej z para- metrami, wystarczy stworzyè dla nich konkretne klasy. Co wiöcej, skoro produkt powinien zawieraè grafikö i tekst, to zamiast tworzyè dwa oddzielne produkty, w tym przykäadzie jed- na klasa bödzie zawieraäa wszystkie informacje bez zäamania zasady mówiñcej, Ĕe klasa po- winna mieè tylko jednñ odpowiedzialnoĈè. Ta odpowiedzialnoĈè to wyĈwietlenie tekstu i grafi- ki odpowiadajñcej danemu krajowi. PoniewaĔ aplikacja jest bardzo prosta, odpowiedzialnoĈè kaĔdego produktu takĔe nie jest zäoĔona. Nowe fabryki Nowe fabryki, Creator i CountryCreator, sñ podobne do poprzednich, ale zawierajñ para- metr i podpowiadanie typu. Podpowiadanie typu pozwala na programowanie przy wyko- rzystaniu interfejsu (Product), a nie jego konkretnych implementacji. ?php //Creator.php abstract class Creator { protected abstract function factoryMethod(Product $product); public function doFactory($productNow) { $countryProduct=$productNow; $mfg= $this- factoryMethod($countryProduct); return $mfg; } } ? Jak widaè, w klasie abstrakcyjnej Creator obie metody, factoryMethod() i startFactory(), wymagajñ podania parametru. Co wiöcej, poniewaĔ podpowiedĒ typu wymaga obiektu typu Product, a nie implementacji produktu, moĔe byè wykorzystana z dowolnñ konkretnñ in- stancjñ typu Product. Konkretna klasa CountryCreator implementuje metodö factoryMethod() z odpowiednim parametrem przy wykorzystaniu podpowiadania typów. OczywiĈcie klasa dziedziczy metodö startFactory(), która bödzie wykorzystywana w klasie Client: ?php //CountryFactory.php include_once( Creator.php ); include_once( Product.php ); class CountryFactory extends Creator { private $country; protected function factoryMethod(Product $product) { $this- country=$product; return($this- country- getProperties()); } } ? Wprowadzanie zmian w klasach _ 91 Poleć książkęKup książkę Klasa CountryCreator zawiera prywatnñ zmiennñ, $country, która przechowuje produkt Ĕñdany przez klienta. Nastöpnie za poĈrednictwem metody getProperties() zwracany jest stworzony produkt. Nowe produkty Zmiany w konkretnych produktach nie powodujñ koniecznoĈci wprowadzania zmian w in- terfejsie Product — pozostaje on niezmieniony: ?php //Product.php interface Product { public function getProperties(); } ? To oznacza, Ĕe produkty konkretne muszñ posiadaè ten sam interfejs i — jak niedäugo zoba- czysz — majñ. Nowe implementacje zawierajñ jednak zarówno tekst, jak i grafikö. Tekst jest wpisany w ciele klasy (w rzeczywistoĈci powinien byè pobierany z pliku tekstowego lub bazy danych), a grafika wywoäywana jest przy wykorzystaniu znacznika img src... . PoniĔsza klasa zawiera tekst i grafikö pobranñ ze stron CIA (http://1.usa.gov/akOFIK): ?php //KyrgyzstanProduct.php include_once( FormatHelper.php ); include_once( Product.php ); class KyrgyzstanProduct implements Product { private $mfgProduct; private $formatHelper; public function getProperties() { $this- formatHelper=new FormatHelper(); $this- mfgProduct=$this- formatHelper- addTop(); $this- mfgProduct.= KYRGYZSTAN img src= Countries/Kyrgyzstan.png class= pixRight width= 600 height= 304 header Kirgistan /header p Malowniczy kraj w centralnej Azji hoĪdujîcy tradycji nomadów. Znaczna jego ´czĂŁð zostaĪa w 1876 roku zaanektowana przez RosjĂ. W 1916 roku Kirgizi ´wzniecili przeciwko imperium rosyjskiemu powstanie, w którym zginĂĪa prawie ´jedna szósta populacji Kirgistanu. Kirgistan staĪ siĂ republikî sowieckî w roku ´1936, a ogĪosiĪ niepodlegĪoŁð w roku 1991, po rozpadzie Zwiîzku Radzieckiego. ´Demonstracje, które przetoczyĪy siĂ przez caĪy kraj wiosnî 2005 r., zaowocowaĪy ´obaleniem rzîdzîcego od poczîtków niepodlegĪoŁci prezydenta Askara AKAJEWA. ´W wyborach prezydenckich w czerwcu 2005 r. ze znacznî przewagî gĪosów zwyciĂšyĪ ´byĪy premier, Kurmanbek BAKIJEW. Przez kolejne kilka lat nowy prezydent ´manipulowaĪ parlamentem w celu wzmocnienia swojej wĪadzy. W czerwcu 2009 r., ´po miesiîcach represji wobec swoich przeciwników politycznych i krytycznych ´mediów, Bakijew wygraĪ w kolejnych wyborach prezydenckich, uznanych przez ´Łrodowisko miĂdzynarodowe za nieuczciwe. W kwietniu 2010 r. ogólnokrajowe ´protesty spowodowaĪy usuniĂcie Bakijewa z urzĂdu i wygnanie go z kraju. Jego ´nastĂpczyni, Roza OTUNBAJEWA, piastowaĪa to stanowisko przejŁciowo, do czasu ´inauguracji prezydentury Almazbeka ATAMBAJEWA w grudniu 2011 r. Problemy kraju ´to: tempo demokratyzacji, korupcja, konflikty na tle etnicznym oraz terroryzm. /p KYRGYZSTAN; $this- mfgProduct .=$this- formatHelper- closeUp(); return $this- mfgProduct; } } ? 92 _ Rozdziaĥ 5. Wzorzec Metoda Fabrykujéca Poleć książkęKup książkę Wynik dziaäania nie ulegä zmianie wzglödem pierwotnego rozwiñzania, w którym tekst i grafika byäy umieszczone w osobnych klasach. Rysunek 5.5 przedstawia wynik dziaäania programu. Rysunek 5.5. Parametryzowane fabryki pozwalajñ na obsäugö wielu produktów Byè moĔe zauwaĔyäeĈ, Ĕe obrazek znajduje siö po prawej stronie, zamiast po lewej, i jest wiökszy w porównaniu z mapñ Mali — poza tym wynik jest prawie identyczny. NowoĈciñ jest dodanie instancji klasy FormatHelper. Jest to klasa pomocnicza, której dziaäanie musi zo- staè wyjaĈnione w kontekĈcie wzorca projektowego i tej konkretnej implementacji. Najpierw jednak musimy jeszcze raz przyjrzeè siö klasie Client, poniewaĔ takĔe ona ulegäa zmianie — wymaga podania parametru. Klient z parametrem Przykäady z poczñtku rozdziaäu przedstawiajñ klasö Client, która po prostu wysyäa Ĕñdanie poprzez interfejs fabryki w celu uzyskania produktu. Po wprowadzeniu zmian Ĕñdanie wy- syäane jest przy wykorzystaniu parametru. ?php //Client.php include_once( CountryFactory.php ); include_once( KyrgyzstanProduct.php ); class Client { private $countryFactory; public function __construct() { $this- countryFactory=new CountryFactory(); echo $this- countryFactory- doFactory(new KyrgyzstanProduct()); } } $worker=new Client(); ? Wprowadzanie zmian w klasach _ 93 Poleć książkęKup książkę Klasy pomocnicze Klasa pomocnicza we wzorcu projektowym jest klasñ majñcñ za zadanie wykonaè jakñĈ ope- racjö, którñ lepiej wyodröbniè do osobnego obiektu, niĔ wäñczyè do jednego z uczestników. O klasie pomocniczej moĔesz myĈleè podobnie jak o zewnötrznym arkuszu stylów CSS. MógäbyĈ dodawaè te same style do kaĔdej klasy, jednak o wiele wydajniejszym rozwiñza- niem jest zawarcie ich w jednym pliku i doäñczenie za pomocñ znacznika link . Podobnie jeĔeli posiadasz pewien zestaw znaczników formatujñcych, moĔna je umieĈciè w odröbnym obiekcie, aby moĔna byäo wykorzystaè go wielokrotnie. PoniĔszy listing przedstawia wyko- rzystanñ klasö pomocniczñ: ?php class FormatHelper { private $topper; private $bottom; public function addTop() { $this- topper= !doctype html html head link rel= stylesheet type= text/css href= products.css / meta charset= UTF-8 title Fabryka map /title /head body ; return$this- topper; } public function closeUp() { $this- bottom= /body /html ; return$this- bottom; } } ? Klasa zawiera kod HTML otaczajñcy ciaäo strony, ale takĔe zaäñcza arkusz stylów CSS — pro- ducts.css. Dla wygody klasa pomocnicza zawiera kod HTML dodawany zwykle na poczñtku i koþcu strony w dwóch metodach publicznych: addTop() i closeUp(). Dziöki temu instancja konkretnego produktu moĔe zostaè umieszczona pomiödzy odpowiednimi znacznikami formatujñcymi HTML. Arkusze stylów CSS dajñ programistom dodatkowe moĔliwoĈci. Dwie klasy z poniĔszego listingu pozwalajñ zdecydowaè, czy rysunek powinien byè wyrównany do lewej, czy prawej strony: @charset UTF-8 ; /* CSS Document */ img { padding: 10px 10px 10px 0px; } .pixRight { float:right; margin: 0px 0px 5px 5px; } .pixLeft 94 _ Rozdziaĥ 5. Wzorzec Metoda Fabrykujéca Poleć książkęKup książkę { float:left; margin: 0px 5px 5px 0px; } header { color:#900; font-size:24px; font-family: Arial Black , Gadget, sans-serif; } body { font-family:Verdana, Geneva, sans-serif; font-size:12px; } MoĔesz nawet uznaè plik ze stylami za klasö pomocniczñ. W wiökszych projektach moĔesz teĔ zechcieè dodaè jakieĈ skrypty JavaScript lub jQuery jako klasy pomocnicze. Diagram plików Nieformalny diagram, który uznaäem za przydatny, to diagram plików. Skäada siö z rysunków plików i folderów wykorzystywanych we wzorcu projektowym wraz z relacjami, jakimi sñ poäñ- czone. Podobny jest do diagramu klas, ale przedstawia poszczególne pliki. Rysunek 5.6 przed- stawia diagram plików dla wzorca Metoda Fabrykujñca zaprezentowanego w tym rozdziale. Rysunek 5.6. Pliki z klasami pomocniczymi i zasobami Jak widaè na diagramie, klasy pomocnicze i zasoby, mimo Ĕe nie sñ czöĈciñ wzorca projekto- wego, sñ wykorzystywane przez produkty. Jak wskazuje przerywana ramka, sñ oddzielone od samego wzorca, a pogrubiona strzaäka Ĉwiadczy o ich wykorzystaniu przez konkretne produkty. Wprowadzanie zmian w klasach _ 95 Poleć książkęKup książkę Produkty siý zmieniajé, interfejs zostaw w spokoju Jednñ z najwiökszych zalet wzorców projektowych jest äatwoĈè, z jakñ moĔna wprowadzaè zmiany w klasach bez koniecznoĈci przerabiania pozostaäych elementów programu. Sekre- tem tej äatwoĈci jest zmiana zawartoĈci przy zachowaniu tego samego interfejsu. Dziaäaniem, które uproĈciäoby klasy, jest przeniesienie tekstu na zewnñtrz konkretnego pro- duktu. Dziöki umieszczeniu notatek w pliku tekstowym, a nastöpnie äadowaniu ich do zmien- nych nie tylko zyskujemy na äatwoĈci wprowadzania zmian w tekĈcie, ale takĔe klasa pro- duktu stanie siö bardziej czytelna. W nowej klasie konkretnego produktu äadujemy tekst do zmiennej $countryNow. Zamiast wiöc duĔej iloĈci tekstu konkretny produkt zawiera piöè linii kodu zapisujñcego notatkö w zmiennej. PoniĔszy listing przedstawia nowy produkt (Moädawia) zawierajñcy nowy spo- sób äadowania tekstu: ?php //TextProduct.php include_once( FormatHelper.php ); include_once( Product.php ); class MoldovaProduct implements Product { private $mfgProduct; private $formatHelper; private $countryNow; public function getProperties() { //àaduje tekst z pliku zewnĊtrznego $this- countryNow=file_get_contents( CountryWriteups/Moldova.txt ); $this- formatHelper=new FormatHelper(); $this- mfgProduct=$this- formatHelper- addTop(); $this- mfgProduct.= img src= Countries/Moldova.png class= pixRight width= 208 ´height= 450 ; $this- mfgProduct .= header MoĪdawia /header ; $this- mfgProduct .= p $this- countryNow /p ; $this- mfgProduct .=$this- formatHelper- closeUp(); return $this- mfgProduct; } } ? Jak widzisz, caäy blok tekstu zniknñä. To, co nie ulegäo zmianie — i jest bardzo waĔne, aby nie ulegäo — to interfejs getProperties(). Dopóki interfejs pozostanie niezmieniony, wpro- wadzanie zmian we wzorcu nie spowoduje bäödów w programie. Nawet dodanie nowych, zewnötrznych zasobów nie jest problemem. Rysunek 5.7 przedstawia wynik dziaäania pro- gramu z nowym produktem. Podczas gdy poziom zäoĔonoĈci Twoich produktów bödzie wzrastaä — bödñ wykonywaäy wiöcej zadaþ niĔ proste umieszczenie na stronie tekstu i grafiki — znaczenie interfejsu takĔe bödzie rosäo. Na szczöĈcie dbanie o pojedynczy interfejs jest o wiele äatwiejsze niĔ dbanie o wiökszñ liczbö klas i obiektów. WäaĈnie dlatego wzorzec Metoda Fabrykujñca pozwala uproĈciè sposób tworzenia obiektów — zachowuje pojedynczy interfejs. 96 _ Rozdziaĥ 5. Wzorzec Metoda Fabrykujéca Poleć książkęKup książkę Rysunek 5.7. Opis pochodzñcy z zasobów zewnötrznych Wprowadzanie zmian w klasach _ 97 Poleć książkęKup książkę 98 _ Rozdziaĥ 5. Wzorzec Metoda Fabrykujéca Poleć książkęKup książkę Skorowidz CSS, 94, 128, 278, 282, 290 wywoäanie, 27 D dane dostöpowe, 200, 201 poäñczeniowe, 247 MySQL, 201, 202 przetwarzanie, 217 typowanie, 39 wprowadzanie, 280, 281 wraĔliwe, 214 dekorator, 135, 137, 139, 144, 147, 155 delegacja, 61 diagram, 77, 78 czynnoĈciowy, 78 interakcji, 76, 78 klas, Patrz: klasa diagram obiektów, 75 plików, 95 przepäywu, 77 stanów, 78, 177, 189 strukturalny, 78 dziedziczenie, 46, 47, 58, 61, 62, 72, 117, 126, 139 päytkie, 47 po klasie abstrakcyjnej, 55 wielokrotne, 36, 117, 120, 122 E element, Patrz: obiekt enkapsulacja, 41, 42, 45, 62, 106, 202, 203, 217 hasäa, 210 loginu, 210 zäamanie, 42 295 A abstrakcja, 33, 269 adapter, 142 kategorii klas, 117 kategorii obiektów, 117 adnotacja z pseudokodem, 68, 69 adres URL, 278 agregacja, Patrz: relacja agregacji akcesor, 107, 112, 180, 272, Patrz teĔ: metoda pobierajñca Alexander Christopher, 13 algorytm, 73 enkapsulujñcy, 217, 219, 222 rodzina, 219, 224 wyszukiwania, 239 arkusz stylów CSS, Patrz: CSS asocjacja, Patrz: relacja asocjacji autoreferencja, 179 B Banda Czterech, Patrz: GoF, Gamma Erich, Helm Richard, Johnson Ralph, Vlissides John baza danych MySQL, 115, 199, 227, 247, 278 bezpieczeþstwo, 201, 204, 214, 227 biblioteka, 13 jQuery Mobile, 285, 289, 290 standardowa PHP, Patrz: SPL bäñd, 26 Booch Grady, 34, 68, 77, 78, 198 C cecha, 36 Chelimsky David, 45 Chunqiao Zhang, 53 CMS, 278 Poleć książkęKup książkę F fabryka, 67, 83 firewall, 204 formularz HTML, 231, 249, 252 framework, 13, 64, 164, 170 Freeman Elizabeth, 219 Freeman Eric, 219 funkcja, 30 clone, 99, 100, 102 construct, 24, 25 file_get_contents, 142 include_once, 37 makeConProto, 112 md5, 207, 212, 214 G Gamma Erich, 19, 39, 53, 62, 65, 117, 203 Gardner Lyza, 133 GoF, 53, 62, 65, 219, Patrz teĔ: Gamma Erich, Helm Richard, Johnson Ralph, Vlissides John Grigsby Jason, 133 H hasäo, 205, 209 Helm Richard, 19, 53, 65, 117 Hevery Miško, 103, 203 Hongwen Wang, 53 I implementacja, Patrz: relacja implementacji informacji ukrywanie, 41 interfejs, 34, 37, 38, 39, 41, 47, 54, 66, 72, 83, 96, 204 Creator, 83, 85 dekoratora, 137 dziedziczenie, 36 implementacja, 37, 49, 55 Observer, 267 opisujñcy obiekt, 34 prototypu, 107 SplObjectStorage, 267, 269, 271 SplObserver, 267, 269, 270, 294 SplSubject, 267, 269, 270, 294 Strategia, 50 Subject, 267 typ, 54 296 _ Skorowidz uĔytkownika, 41, 51, 150 graficzny, 51 wzorca Obserwator, 267 znaczników HTML, 150 J Johnson Ralph, 19, 53, 65, 68, 117, 160 K kategoria klas, 62 obiektów, 63 zasiögu, 62 Kaye Jonathan, 19 klasa, 23, 62, 66, 204 abstrakcyjna, 34, 35, 36, 39, 41, 66, 72, 161 instancja, 54 adapter, 119 adaptowana, 143 Client, 25, 27, 66, 81, 99, 105, 136, 149, 154, 162, 173, 221, 246 ConcreteSubject, 274 Context, 175, 179, 180, 181, 219, 223 delegacja, Patrz: delegacja diagram, 61, 66 dziedziczñca, 46 FormatHelper, 93 instancja, 25, 30, 34, 67, 155 interfejs, 35 kategoria, Patrz: kategoria klas konstruktor, 24, 25 metoda, Patrz: metoda nadrzödna, 36, 39, 46, 58 obiekt, Patrz: klasa instancja obsäugujñca, 76 odbierajñca, 245 odpowiedzialnoĈè, 24 opakowujñca, 142 poäñczeniowa, 226 pomocnicza, 94 potomna, 36, 58, 160 Proxy, 209, 212 SplObjectStorage, 269, 271 SplObserver, 269, 270 SplSubject, 269, 270 stanu, 181 Subject, 274 sygnatura, 35 Poleć książkęKup książkę wäaĈciwoĈè, Patrz: wäaĈciwoĈè wprowadzanie zmian, 86, 87, 88, 89, 90 wysyäajñca, 245 klient, 85, 111, 204, 277 SPL, 273 klonowanie, 99, 102, 105, 107, 112, 115 kod spaghetti, 30 kompozycja, 117, 120, 126 konstruktor, 102, 103 kontrola odwrócenie, 164 przepäyw, 163 kontroler, 51 L logowanie, 204, 205, 209 M Mao Zedong, 53 maszyna stanowa, 19, 78, 177, 178 metoda, 23, 25, 43, 55 abstrakcyjna, 35, 37, 73, 161, 270 algorithm, 221, 230 attach, 274 detach, 274 factoryMethod, 261 feedFactory, 261 getProperties, 84 pobierajñca, 44, 45 setObservers, 272 szablonowa, 161 templateMethod, 159, 162 update, 270, 271 ustawiajñca, 44, 45 model, 51 Model-View-Control, Patrz: MVC modularyzacja, 23 mutator, 107, 112, 272, Patrz: metoda ustawiajñca MVC, 51, 53, 267 Myers Tom, 22 myĈlenie abstrakcyjne, 33 O obiekt, 42, 62, 74 adapter, 119 diagram, Patrz: diagram obiektów domenowy, 51 instancja, 99, 114 kategoria, Patrz: kategoria obiektów odpowiedzialnoĈè, 164 powtórne wykorzystanie, 58 prezentacyjny, 51 produktu, Patrz: produkt stan, 180 tworzenie, 62 zäoĔonoĈè, 58, 61 zmiana stanu, 175, 176, 267, 268 Object Management Group, Patrz: OMG obserwator, 267, 269, 271, 272, 274, 276, 287 odpowiedĒ binarna, 22 OMG, 68 opakowywanie, 142, 143 Opdyke William, 160 operacja, 73 operator rozróĔnienia zasiögu, 38, 202 P podmiot, 267, 271 polecenie warunkowe, 176, 188, 219 polimorfizm, 47, 49, 50, 73, 84, 221 procedura, Patrz: funkcja produkt, 83, 84 dodawanie, 90 graficzny, 89 tekstowy, 88 programowanie dynamiczne, 22 obiektowe, 13, 20, 22, 29, 30, 31, 33, 45, 50, 77, 163, 294 proceduralne, 13, 19, 29, 30, 45, 163 sekwencyjne, 13, 19, 29, 77 przepäyw kontroli, Patrz: kontrola przepäyw N Qing Jiang, 53 Nakhimovsky Alexander, 22 Nixon Robin, 14, 21 notacja, 77 Q Skorowidz _ 297 Poleć książkęKup książkę R rekurencja, 179 relacja, 73 agregacja, 71, 224 asocjacji, 69, 71, 72, 74 dziedziczenia, 72 implementacji, 72, 73 tworzenia, 74 wielokrotna, 74 Rumbaugh James, 68 S Singleton, 79 Sklar David, 21 skrypt wyzwalajñcy, 223 säowo kluczowe clone, 102 interface, 55 static, 203 SPL, 267, 269, 294 staäa, 38, 201 Standard PHP Library, Patrz: SPL strefa czasowa, 257 subskrybent, 271 sygnatura, 36, 49, 55 system CMS, 278 szablon, 13, 64 T tabela, 217 MySQL, 279 odpowiedzi, 247, 249 tablet, 233, 235, 269, 283, 290 tablica, 41, 230, 242 pusta, 242 telefon komórkowy, 269, 289 test jednostkowy, 103 The Gang of Four, Patrz: GoF, Gamma Erich, Helm Richard, Johnson Ralph, Vlissides John traits, Patrz: cecha typ deklarowanie, 54 implementacji, 39 int, 41 interfejsu, Patrz: interfejs typ podpowiadanie, 39, 41, 54, 56, 91, 112, 210 skalarny, 41 298 _ Skorowidz string, 41 zwracany, 49 typowanie danych, Patrz: dane typowanie U uczestnik, 67 UI, Patrz: interfejs uĔytkownika ukrywanie informacji, Patrz: informacja ukrywanie UML, 61, 65, 68, 69, 77 Unified Modeling Language, Patrz: UML urzñdzenie mobilne, 28, 31, 126, 128, 133, 235, 269, 285 uĔytkownik, 205 nazwa, 205, 209 V Vlissides John, 19, 53, 65, 117, 164 W Wenyuan Yao, 53 widocznoĈè, 36, 42 private, 42 protected, 43 public, 44 widok, 51 wäaĈciwoĈè, 23, 25, 35 abstrakcyjna, 35 wzorzec Adapter, 117, 119, 120, 133, 142 kategorii klas, 122 kategorii obiektów, 122, 126 wykorzystujñcy kompozycjö, 126 Budowniczy, 79 czynnoĈciowy, , 62, 64, 157 komunikacja, 158 Dekorator, 117, 135, 136, 137, 142 Fabryka Abstrakcyjna, 74, 79, 81, 82, 83 Fasada, 117 Interpreter, 157 Iterator, 157 Kompozyt, 117 Kontekst, 20 kreacyjny, 62, 64, 79 kryteria wyboru, 63 ãaþcuch OdpowiedzialnoĈci, 75, 76, 157, 199, 245, 246, 247, 251, 255, 256, 287 Poleć książkęKup książkę Mediator, 157 Metoda Fabrykujñca, 66, 67, 74, 79, 165, 166, 167, 256, 261 Metoda Szablonowa, 157, 159, 160, 163, 164, 165, 166, 167, 174 hak, 169, 171, 172 Most, 117 Obserwator, 157, 199, 267, 268, 269, 278, 283, 287, 294 interfejs wbudowany, 267 Opakowanie, 129, 135, 142 Pamiñtka, 157 Polecenie, 157 Prototyp, 79, 99, 100, 107, 115 Proxy, 117, 199, 204, 209, 214 inteligentna referencja, 205 podmiot, 205 prawdziwy podmiot, 205, 212 wirtualny, 204 zabezpieczajñcy, 205 zdalny, 204 Pyäek, 74, 117 Singleton, 203 Stan, 157, 158, 175, 176, 178, 183, 197, 198, 218, 219 Strategia, 20, 31, 50, 71, 77, 157, 158, 199, 217, 218, 219, 222, 227, 242 strukturalny, 62, 64, 117, 204 Wizytator, 157 z parametrami, 90, 91 Z zasada Hollywood, 162, 163, 164, 174 wyjñtki, 169 jednej odpowiedzialnoĈci, 24 odwróconej struktury kontroli, Patrz: zasada Hollywood Przedszkola, 164 wzorców projektowych druga, 58 pierwsza, 54 zestaw zachowaþ, 219 zäoĔonoĈè, 61, Patrz: obiekt zäoĔonoĈè zmienna, 35, 38, 54, 114, 155 boolowska, 172, 173 globalna, 203 observers, 271 prywatna, 202, 224, 271 statyczna, 202, 203, 204 ś Ĕñdanie, 245, 255, 283 inicjowanie, 246 Skorowidz _ 299 Poleć książkęKup książkę 300 _ Skorowidz Poleć książkęKup książkę
Pobierz darmowy fragment (pdf)

Gdzie kupić całą publikację:

PHP. Wzorce projektowe
Autor:

Opinie na temat publikacji:


Inne popularne pozycje z tej kategorii:


Czytaj również:


Prowadzisz stronę lub blog? Wstaw link do fragmentu tej książki i współpracuj z Cyfroteką: