SlideShare a Scribd company logo
1 of 45
Download to read offline
IDZ DO
         PRZYK£ADOWY ROZDZIA£

                           SPIS TRE CI   Head First Design
                                         Patterns. Edycja polska
           KATALOG KSI¥¯EK
                                         Autorzy: Eric Freeman, Elisabeth Freeman
                      KATALOG ONLINE     T³umaczenie: Pawe³ Koronkiewicz (wprowadzenie,
                                         rozdz. 1–8), Grzegorz Kowalczyk (rozdz. 9–14)
                                         ISBN: 83-7361-792-2
       ZAMÓW DRUKOWANY KATALOG           Tytu³ orygina³u: Head First Design Patterns
                                         Format: 200×230, stron: 656
              TWÓJ KOSZYK
                                              Poznaj w niekonwencjonalny sposób zasady stosowania wzorców projektowych
                    DODAJ DO KOSZYKA
                                             • Dowiedz siê, czym s¹ wzorce projektowe
                                             • Poznaj typy wzorców projektowych
         CENNIK I INFORMACJE                 • Zastosuj wzorce projektowe w praktyce
                                             • Naucz siê projektowaæ aplikacje w oparciu o wzorce projektowe
                   ZAMÓW INFORMACJE      Otwórz swój umys³. Poznaj wszystko, co jest zwi¹zane z wzorcami projektowymi,
                     O NOWO CIACH        w sposób gwarantuj¹cy szybkie i skuteczne opanowanie zasad ich stosowania.
                                         Zapomnij o listingach licz¹cych tysi¹ce linii, d³ugich i nu¿¹cych opisach teoretycznych
                       ZAMÓW CENNIK      oraz rozbudowanych schematach zale¿no ci. Czytaj¹c ksi¹¿kê „Head First Design
                                         Patterns. Edycja polska”, poznasz wzorce projektowe w inny sposób. Wzorce projektowe
                                         to gotowe opisy rozwi¹zañ najczê ciej spotykanych zagadnieñ zwi¹zanych z tworzeniem
                 CZYTELNIA               oprogramowania. Aby je prawid³owo stosowaæ, nale¿y poznaæ za³o¿enia, na podstawie
                                         których zosta³y stworzone, oraz nauczyæ siê implementowaæ je we w³a ciwy sposób.
          FRAGMENTY KSI¥¯EK ONLINE       Dziêki ksi¹¿ce „Head First Design Pattern. Edycja polska” wszystkie pojêcia zwi¹zane
                                         ze wzorcami projektowymi przestan¹ byæ dla Ciebie wiedz¹ tajemn¹. Autorzy ksi¹¿ki,
                                         wykorzystuj¹c najnowsze elementy teorii uczenia, przedstawi¹ Ci wszystkie zagadnienia
                                         niezbêdne do rozpoczêcia projektowania i tworzenia aplikacji w oparciu o wzorce
                                         projektowe. Poznasz najczê ciej stosowane wzorce projektowe, metody ich
                                         implementacji i zadania, do jakich s¹ przeznaczone. Jednak, co najwa¿niejsze,
                                         nauczysz siê stosowaæ tê wiedzê w praktyce.
                                              • Cele stosowania wzorców projektowych
                                              • Za³o¿enia, na których opieraj¹ siê wzorce projektowe
                                              • Najwa¿niejsze i najczê ciej wykorzystywane wzorce projektowe
                                              • Przechowywanie i prezentacja danych
Wydawnictwo Helion                            • Mechanizm RMI
ul. Chopina 6                                 • Wzorzec MVC
44-100 Gliwice                                • Implementacja wzorców projektowych w aplikacjach
tel. (32)230-98-63                       Przekonaj siê, ¿e nowoczesne metody nauczania mog¹ zmieniæ równie¿ sposób
e-mail: helion@helion.pl                 poznawania nowoczesnych technik programistycznych.
Spis treści (skrócony)
                Wprowadzenie                                                                                       21
            1. Witamy w krainie wzorców projektowych: wprowadzenie                                                 33
            2. Jak sprawić by Twoje obiekty
               były zawsze dobrze poinformowane: Wzorzec Obserwator                                                67
            3. Dekorowanie zachowania obiektów: Wzorzec Dekorator                                              109
            4. Pizzeria zorientowana obiektowo: Wzorzec Fabryka                                                139
            5. Obiekty jedyne w swoim rodzaju: Wzorzec Singleton                                               197
            6. Hermetyzacja wywołań: Wzorzec Polecenie                                                         217
            7. Zdolność do adaptacji: Wzorce Adapter oraz Fasada                                               259
            8. Hermetyzacja algorytmów: Wzorzec Metoda Szablownowa                                             297
            9. Zarządzanie kolekcjami: Wzorce Iterator i Kompozyt                                              335
           10. Stan obiektu: Wzorzec Stan                                                                      403
           11. Kontrola dostępu do obiektu: Wzorzec Proxy                                                      447
           12. Łączenie wzorców: Wzorce złożone                                                                517
           13. Wzorce projektowe w praktyce: Nowe życie z wzorcami                                             595
           14. Dodatek: inne wzorce                                                                            629
                Skorowidz                                                                                      649




    Spis treści (na serio)
      Wprowadzenie
      Twój mózg jest skoncentrowany na wzorcach projektowych.
      W tym rozdziale Ty starasz się czegoś dowiedzieć, a Twój mózg robi Ci przysługę i nie przykłada się
      do zapamiętywania zdobywanej wiedzy. Twój mózg myśli sobie: „Lepiej zostawię miejsce w pamięci
      na bardziej istotne informacje, na przykład: jakich dzikich zwierząt należy unikać bądź czy jeżdżenie nago
      na snowboardzie jest dobrym pomysłem”. A zatem, w jaki sposób możesz przekonać swój mózg, że Twoje
      życie zależy od poznania wzorców projektowych?


                    Dla kogo przeznaczona jest ta książka?                                                         22
                    Wiemy także, co sobie myśli Twój mózg                                                          23
                    Metapoznanie                                                                                   25
                    Zmuś swój mózg do posłuszeństwa                                                                27
                    Zespół recenzentów technicznych                                                                30
                    Podziękowania                                                                                  31




6
Wprowadzenie do wzorców projektowych



                 1
                              Witamy w krainie wzorców projektowych
                              Ktoś rozwiązał już Twoje problemy. W tym rozdziale dowiesz się, dlaczego (i w jaki
                              sposób) możesz wykorzystać wiedzę i doświadczenia zdobyte przez innych projektantów i programistów,
                              którzy podczas pracy nad różnymi projektami zmuszeni byli wstąpić na pełną zdradliwych pułapek ścieżkę
                              i — co najważniejsze — udało im się przeżyć taką wyprawę. Zanim dobrniemy do końca rozdziału, rzucimy
                              okiem na sposoby wykorzystywania wzorców projektowych i przedstawimy ich zalety, poznamy kilka
                              podstawowych zasad projektowania zorientowanego obiektowo, a także omówimy sposób działania
                              przykładowego wzorca. Najlepszą metodą zastosowania wzorca jest załadowanie go bezpośrednio
                              do Twojego mózgu, a następnie zlokalizowanie obszarów w obrębie projektowanych rozwiązań oraz
                              istniejących aplikacji, w których możesz je zastosować. Pracując z wzorcami projektowymi, zamiast
                              wielokrotnego wykorzystywania tych samych fragmentów kodu, wielokrotnie wykorzystujesz swoje
                              doświadczenia.

                                                                      Prosta aplikacji o nazwie SymulatorKaczki                                                                                                                                                                                                                                      34
                  Pamiętaj,                                           Jacek rozmyśla o dziedziczeniu…                                                                                                                                                                                                                                                37
         opanowanie takich                                           A może by tak interfejs?                                                                                                                                                                                                                                                        38
          zagadnień, jak
    abstrakcyjność, dziedziczenie                                     Jedyny pewny element w procesie tworzenia oprogramowania                                                                                                                                                                                                                       40
 i polimorfizm, nie zrobi jeszcze
    z Ciebie dobrego projektanta                                      Oddzielanie tego, co się zmienia, od tego, co pozostaje niezmienione                                                                                                                                                                                                           42
       systemów zorientowanych                                        Projektowanie zachowania Kaczki                                                                                                                                                                                                                                                43
obiektowo. Prawdziwy guru zawsze
  myśli o stworzeniu elastycznego                                     Testowanie kodu klasy Kaczka                                                                                                                                                                                                                                                   50
      projektu, który będzie łatwy
        do serwisowania i będzie                                      Dynamiczne ustawianie zachowania                                                                                                                                                                                                                                               52
       sobie w stanie poradzić ze                                     Wielki diagram „ukrytych” zachowań                                                                                                                                                                                                                                             54
            zmieniającymi się
               warunkami.                                             Relacja MA może być lepsza niż JEST                                                                                                                                                                                                                                            55
                                                                      Rozmawiając o wzorcach projektowania                                                                                                                                                                                                                                           56
                                                                      Potęga wspólnego słownika wzorców                                                                                                                                                                                                                                              60
                                                                      W jaki sposób mogę wykorzystywać wzorce projektowe?                                                                                                                                                                                                                            61
                                                                      Twoja skrzynka narzędziowa                                                                                                                                                                                                                                                     64
                                                                      Rozwiązania ćwiczeń                                                                                                                                                                                                                                                            66


                                                                                                                                                                                                                                                                                                                         ÓZG
                                                                                                                                                                                                                                                                  avior
                                                                                                                                                                                                                                                  fly beh
                                                                                                                                                                                                                                 ulated


                                                                                                                                                                                                                                                                                                                  Twój M
                                                                                                                                                                                                                  Encaps                      ace>>
                                                                                                                                                                                                                                      <<interf
                                                                                                                                                                                                                                                 avior
                                                                                                                                                                                                                                      FlyBeh
                                                                                                                                                                                                                               fly()




                                                                                                                                                                                                                                                                     ay
                                                                                                                                                                                                                                                               FlyNoW
                                                                                                                                                                                                                                  Wings
                                                                                                                                                                                                                           FlyWith                    fly() {
                                                                                                                                                                                                                                                                      - can’t fly!
                                                                                                                                                                                                                      fly() {                            // do nothing
                                                                                                                                                                                                                                   nts duck              }
                                                                                                                                                                                                                        // impleme
                                                                                                                             Duck                                                                                      flying
                                                                                                                                       vior;
                                                                                                                           vior flyBeha                                                                                                                                                       r
                                                                  Client                                                                                                                                                                                                  behavio
                                                                                                                FlyBeha                     ehav-
                                                                                                                                   quackB
                                                                                                                                                                                                                                                             quack
                                                                                                                           ehavior

                                                                                                                                                                                                                                          ulated
                                                                                                                QuackB

                                                                                                                   swim()                                                                                               Encaps                           ace>>
                                     Grupa wzorców projektowych




                                                                                                                            )                                                                                                                    <<interf     ior
                                                                                                                   display(
                                                                                                                             Quack()                                                                                                          QuackBehav
                                                                                                                   perform
                                                                                                                              Fly()                                                                                                       quack()
                                                                                                                    perform           )
                                                                                                                              ehavior(
                                                                                                                     setFlyB            ior()
                                                                                                                                kBehav
                                                                                                                      setQuac              e meth-
                                                                                                                                   duck-lik
                                                                                                                       // OTHER                                                                                                                                                        MuteQuack
                                                                                                                                                                                                                                                             Squeak                     {
                                                                                                                                                                                                                                                                                quack()
                                                                                                                                                                                                                                                                                               - can’t
                                                                                                                                                                                                                         Quack                            {                      // do nothing
                                                                                                                                                                                                                                                  quack()
                                                                                                                                                                                             Duck                                                            duckie                 quack!
                                                                                                                                                                                     Decoy                        quack)
                                                                                                                                                                                                                          {                        // rubber
                                                                                                                                                                                                                               nts duck
                                                                                                                                                             Duck                         ){                        // impleme                      squeak
                                                                                                                                                    Rubber                       display(                                   g
                                                                                                                             Duck                                                         like a decoy             quackin

                                                                       Object
                                                                                                                 Redhead                               {                         // looks


                                                                                                                                                                                                         OBSERWATOR
                                                                                                                                            display()                 ck }
                                                                                         Duck                                                              a rubberdu
                                                                               Mallard                        display()
                                                                                                                       {                     // looks like
                                                                                                                                       }

                                                                       that holds
                                                                                                                             a redhead
                                                                           display()
                                                                                      {                        // looks like
                                                                                                    }
                                                                                          a mallard
                                                                            // looks like


                                                                       state
                                                                                                                     8                                                       8
                                                                                                                                                                             8                                Dog Objec
                                                                                                                                                                                                                           t
                                                                                                        Su           int                                                     8
                                                                                                             bje           t
                                                                                                                   ct Objec
                                                                                                                                                                             8
                                                                                                                                                                                                                                                         Objects ent




                                                                                                                                                                                                          t
                                                                                                                                                                                               Duck Objec                  Cat Object


                                                                                                                                                                                                                                                                                             MVC
                                                                                                                                                                                                                                                         Depend




                                                                                                                                                                                                         Mo           ct
                                                                                                                                                                                                              use Obje



                                                                                                                                                                                                                                                                                                                                    az już całkiem
                                                                                                                                                                                                                           Observers
                                                                       Automatic update/notification                                                                                                                  oller


                                                                                                                                                                                                                                                                                                                      Twój Kod, ter
                                                                                                                                                                                                                Contr
                                                                                                                                                                                                                                                                                                              l
                                                                                                                                                                                                                                                                                                         Mode

                                                                                                                                                                                                                                                                                                                                     cony poprzez
                                                                                                                                                                                                                                                                      est



                                                                                                                                                                                                                                                                                                                      nowy i wzboga
                                                                                                                                                                                                                                                                  Requ




                                                                                                                                                                                                                                                                                                                                     wzorców
                                                                                                                                                                                                                                                                                                                       zastosowanie
                                                                                                                                                                                                                                 View
                                                                                                                                                                                                                                                                                                                       projektowych.




                                                                                                                                                                                                                                                                                                                                                      7
Wzorzec Obserwator



                         2
                                                       Jak sprawić, by Twoje obiekty były
                                                       zawsze dobrze poinformowane
                                                       Nie przegap okazji, kiedy dzieje się coś naprawdę ciekawego!
                                                       Przedstawimy Ci wzorzec, który potrafi poinformować inne obiekty o tym, że wydarzyło się coś, czym
                                                       powinny się zająć. Co ciekawe, obiekty mogą nawet samodzielnie decydować w czasie działania programu
                                                       o tym, czy chcą być informowane o takich wydarzeniach. Wzorzec Obserwator jest jednym z najczęściej
                                                       wykorzystywanych wzorców w pakiecie JDK (ang. Java Development Kit) a co najważniejsze, jest wręcz
                                                       niewiarygodnie użyteczny. W niniejszym rozdziale rzucimy również okiem na relacje typu jeden-do-wielu
                                                       oraz tzw. luźne związki (tak, to prawda, napisaliśmy „luźne związki”). Korzystając z wzorca Obserwator,
                                                       z pewnością odmienisz swoje życie.

                                                                        Aplikacja sprawdzająca warunki pogodowe                                                                        69
                    Pod st a w y                   ow eg o              Spotkanie z wzorcem Obserwator                                                                                 74
                                   a ni a ob ie kt
                    p ro g ra m ow               akcyjność              Wydawca + Prenumerator = wzorzec Obserwator                                                                    75
                                              Abstr
                                                            ja
                                               Hermetyzac               Pięciominutowe przedstawienie — obserwowany kontra obserwujący                                                78
                                                Polimorfiz m            Definicja wzorca Obserwator                                                                                     81
                                                            ie
                                                 Dziedziczen            Siła luźnych zależności                                                                                        83
                   g ra m ow     a ni a
    R eg uł y p ro                                                      Projektowanie stacji meteorologicznej                                                                          86
    ob ie kt ow eg o                                                    Implementacja stacji meteorologicznej                                                                          87
                                                o
                                  obiektoweg
                   ramowania
      Reguły prog                         się zmienia.                  Java — zastosowanie wbudowanego wzorca Obserwator                                                              94
                                ji to, co
                  hermetyzac
      Poddawaj                                 dziczenie.               Ciemna strona klasy java.util.Observable                                                                      101
                                cję nad dzie
                   aj kompozy
       Przedkład                            interfejsów
                                                         ,              Twoja skrzynka narzędziowa                                                                                    104
                             tworzeniu
        Skonc entruj się na                                             Rozwiązania ćwiczeń                                                                                           107
                       entacji.
        a nie implem                                   h
                                        ty, w któryc to
                         orzyć projek               i, o ile
         Staraj się tw bą luźno powiązane
          obiekty są
                      ze so                         zajemnie.
                                       na siebie w
                          oddziałują
           m ożliwe, nie




                                                                                                      RELACJA JEDEN-DO-WIELU
                                                                Obiekt, którego stan
                                                                jest obserwowany


                                                                                        8                  8
                                                                                                            8                Obie
                                                                                                                                      kt Pies
                                                                            Ob                              8
                                                                                              an y




                                                                                        int
                                                                                 iekt             w
                                                                                        obserwo
                                                                                                                                                                Ob iek ty za leż ne




                                                                                                           8
                                                                                                                Obie              a
                                                                                                                       kt Kaczk                 Obie
                                                                                                                                                       kt Kot




                                                                                                                           Obie
                                                                                                                                  kt Mysz
                                                                     Automatyczna aktualizacja
                                                                                                                         Obiekty obserwujące
                                                                     (powiadamianie)                                         (Observers)




8
Wzorzec Dekorator



                   3
                                         Dekorowanie zachowania obiektów
                                         W zasadzie niniejszy rozdział możemy równie dobrze zatytułować
                                         „Otwieranie oczu programistom z nadmiernymi skłonnościami
                                         do nadużywania dziedziczenia”. W tym rozdziale spróbujemy krytycznie przyjrzeć się
                                         zwyczajowym skłonnościom do nadużywania mechanizmu dziedziczenia oraz nauczymy Cię sposobów
                                         dekorowania zachowania klas w czasie działania programu przy użyciu pewnej formy kompozycji
                                         obiektów. Dlaczego? Po zapoznaniu się z technikami dekoracji zachowania klas będziesz mógł wyposażać
                                         swoje (i nie tylko) obiekty w nowe możliwości bez konieczności dokonywania jakichkolwiek modyfikacji
                                         w kodzie klas podstawowych.


                                                     Witamy w „Star Caf�”                                                                   110
                                                     Reguła otwarte-zamknięte                                                               116
                                                     Spotkanie z wzorcem Decorator                                                          118
                                                     Konstruowanie zamówienia przy użyciu Dekoratorów                                       119
                                                     Definicja wzorca Decorator                                                              121
                                                     Dekorujemy nasze Napoje                                                                122
                                                     Tworzymy kod aplikacji „Star Caf�”                                                     125
                                                     Dekoratory w świecie rzeczywistym:
                                                     obsługa wejścia-wyjścia w języku Java                                                  130
             Zawsze sądziłem,                        Tworzenie własnych dekoratorów obsługi wejścia-wyjścia                                 132
  że prawdziwi mężczyźni tworzą                      Twoja skrzynka narzędziowa                                                             135
podklasy dla wszystkiego, co się tylko
 do tego nadaje. Tak było — do czasu,                Rozwiązania ćwiczeń                                                                    136
gdy dowiedziałem się o korzyściach,
  jakie daje możliwość rozszerzania
    możliwości aplikacji na poziomie
  działania, a nie kompilacji. A teraz
     — spójrzcie tylko na mnie!




                                                                                                                                                9
Wzorzec Fabryka



                                                              4
                                                                                                        Pizzeria zorientowana obiektowo
                                                                                                        Przygotuj się do stworzenia kilku projektów, w których zastosujemy
                                                                                                        luźne powiązania pomiędzy poszczególnymi obiektami. Stworzenie
                                                                                                        nowego obiektu to dużo więcej niż tylko proste zastosowanie operatora new. Niebawem przekonasz się,
                                                                                                        że proces ten jest operacją, która nie zawsze powinna być publicznie dostępna, a co więcej, jest operacją,
                                                                                                        która często może prowadzić do poważnych problemów z powiązaniami międzyobiektowymi. A tego byś
                                                                                                        nie chciał, prawda? Przekonaj się, w jaki sposób wzorzec Factory może uratować Cię z takiej opresji.


                                                                                                                                                Kiedy widzisz „nowy” obiekt, myśl o nim jako o „konkretnym”    140
                                                                                                     Klientami fabryki abstrakcyjnej są
                                                                                                     dwa obiekty naszej klasy Pizzeria,
                                                                                                     WłoskaPizzeria i Amerykańska
                                                                                                     Pizzeria.
                                                                                                                                                Pizza w Obiektowie                                             142
                                                                                                             WłoskaPizzeria                     Hermetyzacja procesu tworzenia obiektów                        144
                                                                                                        utwórzPizza()


                                                                                                                                                Budujemy prostą fabrykę pizzy                                  145
      Klasa abstrakcyjna FabrykaSkładnikówPizzy jest
      interfejsem, który określa, w jaki sposób powinna
      być tworzona rodzina spokrewnionych produktów                                                                                             Tworzymy definicję „wzorca” Simple Factory                      147
      — wszystkie składniki, które są niezbędne do                                                           <<interfejs>>
                                                                                                                Ciasto
      zrobienia pizzy.
                                                                                                                                                Nowa struktura Pizzerii                                        150
                                                                                          GrubeChrupkieCiasto           CienkieChrupkieCiasto
                                <<interfejs>>
                           FabrykaSkładnikówPizzy
                      utwórzCiasto()
                                                                                                                                                Zezwalamy klasom podrzędnym na podejmowanie decyzji            151
                      utwórzSos()                                                                            <<interfejs>>

                                                                                                                                                Tworzymy Pizzerię                                              153
                      utwórzSer()
                                                                                                                  Sos
                      utwórzWarzywa()
                      utwórzPepperoni()
                      utwórzMałże()



                                                                                                                                                Deklarowanie metody typu Factory (fabryka)                     155
                                                                                            SosPomidorowy                     SosMarinara




                                                                                                                                                Spotkanie z wzorcem Metoda Fabrykująca                         161
 WłoskaFabrykaSkładnikówPizzy                    AmerykańskaFabryka
                                                  SkładnikówPizzy                                            <<interfejs>>
                                                                                                                  Ser
utwórzCiasto()
utwórzSos()                               utwórzCiasto()
utwórzSer()                               utwórzSos()


                                                                                                                                                Równoległa hierarchia klas                                     162
utwórzWarzywa()                           utwórzSer()
utwórzPepperoni()                         utwórzWarzywa()                                    SerMozzarella                    SerReggiano
utwórzMałże()                             utwórzPepperoni()
                                          utwórzMałże()



                                                                                                             <<interfejs>>
                                                                                                                Małże
                                                                                                                                                Definicja wzorca Metoda Fabrykująca                             164
 Zadaniem fabryk rzeczywistych
 jest wytwarzanie odpowiednich
                                                                                             MrożoneMałże                     ŚwieżeMałże       Pizzeria mocno uzależniona                                     167
 składników pizzy. Każda
 fabryka wie, w jaki sposób
  należy utworzyć składniki
                                                                                                                                                Sprawdzamy zależności pomiędzy obiektami                       168
  odpowiednie dla danego regionu.
                                                                      Każda fabryka wytwarza różne
                                                                      implementacje tej samej rodziny produktów.
                                                                                                                                                Zastosowanie reguły DIP                                        170
                                                                                                                                                A w międzyczasie, na zapleczu Pizzerii…                        174
                                                                                                                                                Rodziny składników…                                            175
                                                                                                                                                Budujemy fabryki składników pizzy                              176
                                                                                                                                                Fabryka Abstrakcyjna                                           183
                                                                                                                                                Za kulisami                                                    184
                                                                                                                                                Definicja wzorca Fabryka Abstrakcyjna                           186
                                                                                                                                                Porównanie Metody Fabrykującej oraz Fabryki Abstrakcyjnej      190
                                                                                                                                                Twoja skrzynka narzędziowa                                     192
                                                                                                                                                Rozwiązania ćwiczeń                                            193




10
Wzorzec Singleton



5
              Obiekty jedyne w swoim rodzaju
              Kolejnym przystankiem w naszej podróży jest wzorzec Singleton,
              czyli nasza przepustka do kreowania jedynych w swoim rodzaju
              obiektów, posiadających tylko jedną instancję. Być może ucieszysz się na wieść
              o tym, że Singleton jest najprostszym z istniejących wzorców projektowych (przynajmniej pod względem
              kategorii stopnia złożoności jego diagramu klas); jak by na to nie patrzeć, jego diagram składa się tylko
              z jednej klasy! Ale nie wpadaj w euforię; niezależnie od prostoty diagramu klas tego wzorca na drodze
              prowadzącej do jego implementacji napotkamy całkiem sporo wybojów i dziur. Lepiej zapnij mocno pasy
              — to nie będzie takie proste jakby mogło się wydawać.


                               Jeden i tylko jeden                                                                        198
                               Mały Singleton                                                                             199
                              Analiza klasycznej implementacji wzorca Singleton                                           201
                              Wyznania obiektu Singleton                                                                  202
                               Fabryka czekolady                                                                          203
                               Definicja wzorca Singleton                                                                  205
                               Uuups, mamy problem…                                                                       206
                               Zostań wirtualną maszyną Java                                                              207
                               Jak sobie radzić z wielowątkowością?                                                       208
                              Wzorzec Singleton — pytania i odpowiedzi                                                    212
Hershey, PA                    Twoja skrzynka narzędziowa                                                                 214
                               Rozwiązania ćwiczeń                                                                        216




                                          obiektowego
                                ramowania
                Wzorce prog                                       , dokonuje relację
                                                                            i        jeden-
                                                            dzów iektam nne. ielanie
                                                in algorytm y ob                         a
                                        je defin y mię się ybe wymieie zy zmieni
                                  finiu— rodz iuje po ają ydynamicznobprkt dz
                                                                onrany e
                       gy er de or oduje,zw st na
                 StrateObs— watji i powsposóbżealkied wację dae zostajorattym dado
                                                        a                              rf ją
                                                                         negoek o oryejs
                             yzacw ator
                                      taki  — po , żemodyfikazależnań.arczaąinte zależnych alający
                                                                     ow st
                                                                      do   D
                 ich hermet Dlu tegy poiektowbstrwyckty ch algorytmuiujehzetee, ejs pozw dnym
                        do-wieekor             al jena akcyjn — owdziedzic in ni rf
                                                      no ie h za
                                            tkie a igo ob                     ane. yc lu
                                                                                          b
                                      u brzwa A                  ktua dajew
                              st ne wszys od doatycznie zauj ką liz zeokreą
                                                                  ja sp        nion
                         ec Stra ,mFaob yk kl nta, kt royj,tego okre definrzonśla klas h klbędzzę
                                                                                              ic as     tylko
                  Wzorzswój daanależnieiść poaiecałych ór dzinąca — ościpozwalaniaklom podr ie miała
                                                      bną do te
                                                  m oda Fabryk znecznale
                                       tw auto
                                       czno zeni
                              elez ioneor Met za ówneznac niie ,        ów zs
                                                                          ro           dana ut a or ny.
                                                                                               as        alny
                         po u ni asty
                  algorytmwiadom jeebie obiektmianibeobkoktzapewnia, że staniektuwzazo wnia globza
                                                                z
                                                    w orze leton ie —                       ie i pe
                                       ąc sidnak tw Sing jakiej klasyąobiekt zoę ob odpowiedzialność
                                        od       na
                   używa. oferuj                 w ty
                                                                                stancj
                                                       chwać,ącznie jedn ind przekazuje
                                                          .
                                         rzal zyść.iscydo w
                                funkcjonecno de i ecył ctory Metho j instanzęi. ych.     cj
                                                                          do te
                                                  Wzorzpunkt dostępu do klas podr dn
                                                            Fa
                                                              ob iektów
                                                  tworzenie




                                                                                                                           11
Wzorzec Polecenie



                                                                                 6
                                                                                                                                              Hermetyzacja wywołań
                                                                                                                                              W niniejszym rozdziale przeniesiemy hermetyzację na
                                                                                                                                              zupełnie nowy poziom: mamy zamiar dokonać hermetyzacji
                                                                                                                                              wywołań metod. Zgadza się, dzięki hermetyzacji wywołań metod możemy
                                                                                                                                              wykrystalizować pewne fragmenty obliczeń tak, że obiekt wywołujący obliczenia nie musi
                                                                                                                                              się martwić, w jaki sposób je wykonać; po prostu wykorzystuje naszą metodę. Z takimi
                                                                                                                                              hermetyzowanymi wywołaniami metod możemy również dokonywać wielu zadziwiająco
                                                                                                                                              sprytnych operacji, takich jak na przykład zapisywanie ich do dzienników czy też ponowne
                                                                                                                                              wykorzystywanie w celu zaimplementowania mechanizmu Cofnij (ang. Undo) w naszej aplikacji.


                                                                                                                        Poproszę
                                                                                                                                                                                           Automatyka w domu i zagrodzie                                 218
                                                                                     z                           ę z serem
                                                                            łada się                   zapiekank słodowy.
                                                                    enie sk
                                                                                                                                                                                           Mamy nową zabawkę! Sprawdzamy, jak działa SuperPilot…         219
                                                                                    w
                                                            Zamówi wybranych enia.                          i napój
                                                               pozycji iecie zamówi
                                                        oraz z          nk
                                                 wienia        e na bla
                                           u zamó ły zapisan
                                   blankiet óre zosta
                                    menu,
                                          kt
                                                                     utwórz
                                                                              Zamówi
                                                                                       enie()
                                                                                                                                                                                           Co zawiera otrzymany dysk CD-R                                220
   Zap
      ieka
           nkaz
                se rem

                odow
                     y
                                                                                                                                                                                           A w międzyczasie w naszym barze szybkiej obsługi…             223
          ój sł
     Nap

                                                                                                                                                                                           Przyjrzyjmy się nieco dokładniej wzajemnym interakcjom…       224
                                                                                                                                        Klient wie
                                                                                                                                                   już, czego                              Zadania i zakresy odpowiedzialności                           225
                                                                                                                                chce,
                                                                                                                                                                                           Od Baru do wzorca Polecenie                                   227
                                                                                                                                                   ie.
                                                                                                                                          zamówien
                                                                                                                                 i składa



                                   pobierzZamó
                                                 wienie()
                                                                                                                                                       się
                                                                                                                                                                                           Nasze pierwsze POLECENIE                                      229
                                                                                                                                   klienta i kiedy już
                                                                                                                   Zamówienie od                        Metoda ta
                                                                                                Kelnerka przyjmuje metodę realizujZamówienie().
                                                                                                z tym upora, wywo
                                                                                                rozpoczyna proce
                                                                                                                  łuje
                                                                                                                 s realizacji Zamó
                                                                                                                                   wienia złożonego
                                                                                                                                                       przez klienta.
                                                                                                                                                                                           Definicja wzorca Polecenie                                     232
                                                                                                                                                                                           Wzorzec Command i SuperPilot                                  234
                                                                                                                                                                                     cje
                                                                                                                                                           Kucharz realizuje instruk
                                                                                                                                                           podane w Zamówieniu
                                                                                                                                                           przygotowuje odpowi
                                                                                                                                                                                  i
                                                                                                                                                                                 edni      Implementujemy SuperPilota                                    236
                                                                          )
                                                                        ie(
                                                                     ien




                                                                                                                                                           posiłek.
                                                                  ów




                                                                                                                                                                                           Sprawdzamy możliwości naszego SuperPilota                     238
                                                                 m
                                                              jZa
                                                            zu
                                                           ali
                                                         re




                        dują
                                           r
                                      Burge lt

                   znaj
                                            Ma


            ieniu kcje
      amów stru y
Na Z szelkie in tego, ab y
 się w dne do właściw eruje                                                  apiekankę
                                                                                       (),                                                                                                 Nadszedł wreszcie czas, aby utworzyć trochę dokumentacji…     241
                                                                                                                                               kt




      ezbę tować ienie ki ując                                     przygotujZ apój()
                                                                                                                                              du




   ni
                                                                                                                                           pro




          go         ów      ug                                    przygotujN
     przy k. Zam rza, posł k
           łe
       posi ą Kucha takimi, ).
                         i
         prac etodam iekankę(
                              ja
                                                                                                                                                                                           Implementacja mechanizmu wycofywania przy użyciu stanów       246
                                                                                                                                          y




          się m gotujZap
                                                                                                                                        cow




                zy
                                                                                                                                     koń




             pr

                                                                                                                                                                                           Każdy pilot powinien posiadać tryb Impreza!                   250
                                                                                                                                                                                           Zastosowanie makropoleceń                                     251
                                                                                                                                                                                           Kolejne zastosowania wzorca Polecenie — kolejkowanie żądań    254
                                                                                                                                                                                           Kolejne zastosowania wzorca Polecenie — żądania rejestracji   255
                                                                                                                                                                                           Twoja skrzynka narzędziowa                                    256
                                                                                                                                                                                           Rozwiązania ćwiczeń                                           258




         12
Wzorce Adapter oraz Fasada



                            7
                                                Zdolność do adaptacji
                                                W niniejszym rozdziale mamy zamiar dokonać paru niesamowitych
                                                wyczynów z dziedziny rzeczy niemożliwych, takich jak na przykład
                                                włożenie kwadratowego kołka do okrągłego otworu. Brzmi nierealnie? Nie
                                                wtedy, kiedy mamy pod ręką odpowiednie wzorce projektowe. Pamiętasz wzorzec Dekorator? Podczas
                                                pracy z nim owijaliśmy obiekty innymi obiektami tak, aby nadać im nowe zachowania. Teraz mamy zamiar
                                                postępować tak samo, ale w nieco innym celu: chcemy sprawić, by ich interfejsy wyglądały jak coś, czym
                                                nie są. Dlaczego jednak mielibyśmy to robić? Na przykład po to, aby zaadaptować projekt oczekujący
                                                danego interfejsu do klasy, która implementuje zupełnie inny interfejs. To jeszcze nie wszystko; skoro
                                                już jesteśmy przy tym temacie, przyjrzymy się również innemu wzorcowi, który owija obiekty w celu
                                                uproszczenia ich interfejsów.
      Europejski standard ściennego
      gniazda elektrycznego

                                                             Adaptery są wśród nas                                                                                                                                       260
                                                             Adaptery zorientowane obiektowo                                                                                                                             261
                                                             Wzorzec Adapter bez tajemnic                                                                                                                                265
                                                             Definicja wzorca Adapter                                                                                                                                     267
                                      Adapter
                                                             Adaptery obiektów i klas                                                                                                                                    268
                                                             Temat dzisiejszej wieczornej pogawędki: Adapter obiektów i Adapter klas                                                                                     271
                                                             Adaptery w świecie rzeczywistym                                                                                                                             272
                                                             Adaptujemy interfejs Enumeration do wymagań interfejsu Iterator                                                                                             273
Standardowa wtyczka zasilająca                               Temat dzisiejszej wieczornej pogawędki: wzorce Dekorator i Adapter                                                                                          276
                                                             Nie ma to jak kino domowe                                                                                                                                   279
                                                             Światła, kamera, fasada!                                                                                                                                    282
                                                             Konstruujemy fasadę naszego systemu kina domowego                                                                                                           285
                                                             Definicja wzorca Fasada                                                                                                                                      288
                                                             Reguła ograniczania interakcji                                                                                                                              289
                                                             Twoja skrzynka narzędziowa                                                                                                                                  294
                                                             Rozwiązania ćwiczeń                                                                                                                                         296


                                                                                                                                                                               Obiekt
                                                                                                                                                                               adaptowany
                                                                                                                                                             e()
                                                                                                                                                     ac   zon
                                                                                                                                               T łum
                                                                                              Klient                żądanie               anie
                                                                                                                           ()         żąd




                                                                                    Klient jest zaprojektowany
                                                                                    niezgodnie z wymogami
                                                                                    interfejsu docelowego.                    Adapter                              interfejs
                                                                                                                                                                             obiektu
                                                                                                                                                                   adaptowa
                                                                                                                                                                             nego
                                                                                                                                                                                                               obiektu
                                                                                                                                                                                          Indyk to interfejs
                                                                                                                y
                                                                                                            low                                                                            adaptowanego.
                                                                                                       doce
                                                                                               rfejs                Adapter implementuje interfejs
                                                                                           inte
                                                                                                                    docelowy i przechowuje                                         fejs
                                                                                                                                             anego.                  ntuje inter
                                                                                                                    instancję obiektu adaptow                impleme
                                                                                                                                                      dapter
                                                                                                                                               IndykA Kaczka.
                                                                                                                                                        y
                                                                                                                                                docelow




                                                                                                                                                                                                                         13
Wzorzec Metoda Szablonowa



                                                                  8
                                                                                                                     Hermetyzacja algorytmów
                                                                                                                     Jesteśmy jak w transie: hermetyzowaliśmy już proces tworzenia
                                                                                                                     obiektów, wywołania metod, złożone interfejsy, kaczki, indyki,
                                                                                                                     pizze… ciekawe, co będzie następne? Otóż, teraz mamy zamiar zająć się
                                                                                                                     hermetyzacją fragmentów algorytmów, tak aby klasy podrzędne mogły „podczepiać się” w różnych
                                                                                                                     miejscach wykonywanych obliczeń. Co więcej, zajmiemy się również regułą projektowania, której korzenie
                                                                                                                     wywodzą się w prostej linii z … Hollywood.

                                                                                                                                                 Tworzymy klasy reprezentujące kawę i herbatę (w języku Java)           299
                                                                                                                                                 Kawa i herbata, czyli klasy abstrakcyjne                               302
                                                                                                                                                 Ciągniemy nasz projekt o krok dalej…                                   303
                                                                                                                                                 Wydobywanie metody recepturaParzenia()                                 304
                                                                                                                                                 Czego już dokonaliśmy?                                                 307
                                                     Zauważyliśmy, że dwie
                                                     receptury są bardzo do siebie
                                                     podobne, chociaż niektóre
                                                                                                                                                 Spotkanie z wzorcem Metoda Szablonowa                                  308
                                                     ich etapy wymagają różnych
                                                     implementacji. Dzięki temu
                                                     spostrzeżeniu mogliśmy                                                                      Zróbmy sobie herbatę…                                                  309
          Herbata
                                                     uogólnić recepturę i umieścić ją
                                                                                                        Kawa
                                      y.
                                                     w klasie bazowej.
                                                                                                 1 Zagrzej
                                                                                                                                                 Co nam daje zastosowanie metody szablonowej?                           310
                      ednią ilość wod                                                                       odpowied
        Zagrzej odpowi                                                                                                nią ilość
                                                                                                                                wody.
                                                                                                                                                 Definicja wzorca Metoda Szablonowa                                      311
     1                                                                                       2    Zalej wrzą
                             y do wrzątku.                                                                   tkiem od
      2 Włó ż torebkę herbat                                                                 3    Nalej kawy
                                                                                                                       mierzoną
                                                                                                                                 porcję ka
                                   i.                                                                         do filiżank                  wy.
                  baty do filiżank
      3 Nalej her
                                                   Napoje
                                                                                         4
                                                                                                 Dodaj cu
                                                                                                          kier i ml
                                                                                                                          i.
                                                                                                                   eko do sm
                                                                                                                                                 Bliskie spotkania z kodem aplikacji                                    312
       4 Dodaj cytryn
                      ę do smaku.                                                                                             aku.
                                                 zawierające                                                                                     Haczyk na wzorzec Metoda Szablonowa…                                   314
                                                   kofeinę
                  uogólnienie               1   Zagrzej odpowiednią ilość wody.                      uogólnienie
                                                                                                                                                 Zastosowanie haczyka                                                   315
                                            2   Zaparz napój.
                                                                                                                                                 Testujemy naszą aplikację                                              316
                      niektóre etapy        3   Nalej uzyskany napój do filiżanki.                    niektóre etapy
                      delegowane są do
                      klasy podrzędneja     4   Domieszaj do napoju odpowiednie
                                                                                                      delegowane są do
                                                                                                      klasy podrzędneja                          Reguła Hollywood                                                       318
              rbata                             dodatki.                                                                     Podklas
    dklasa He                                                                                                                       a Kawa
                                                                                                                                                 Reguła Hollywood a wzorzec Metoda Szablonowa                           319
Po




                                                                                                                                                 Wzorzec Metoda Szablonowa w głębokiej kniei…                           321
2     Włóż torebkę herbaty do
                                          wrzątku.
                                                     Klasa NapójZKo
                                                                      feiną doskonale zna
                                                                                                       2    Zaparz odmier
                                                                                                                          zoną porcję            Sortowanie przy użyciu wzorca Metoda Szablonowa                        322
4     Dodaj cytrynę.                                                    y receptury, choć
                                                     poszczególne etap
                                                                             etap pierwszy                  kawy.
                                                     sama wykonuje tylko
                                                      i trzeci, zostawiają
                                                                           c realizację
                                                                                                        4   Dodaj cuk ier i mleko.               A teraz musimy posortować trochę kaczek…                               323
                                                                         i czwartego
                                                       etapów drugiego
                                                                                                                                                 Porównywanie kaczek z innymi kaczkami                                  324
                                                                             ata.
                                                       klasom Kawa i Herb



                                                                                                                                                 Robimy maszynę do sortowania kaczek                                    326
                                                                                                                                                 Zabawy z ramkami                                                       328
                                                                                                                                                 Aplety Java                                                            329
                                                                                                                                                 Temat dzisiejszej wieczornej pogawędki:
                                                                                                                                                 wzorce Metoda Szablonowa oraz Strategia                                330
                                                                                                                                                 Twoja skrzynka narzędziowa                                             332
                                                                                                                                                 Rozwiązania ćwiczeń                                                    333




              14
Head First Design Patterns. Edycja polska
Head First Design Patterns. Edycja polska
Head First Design Patterns. Edycja polska
Head First Design Patterns. Edycja polska
Head First Design Patterns. Edycja polska
Head First Design Patterns. Edycja polska
Head First Design Patterns. Edycja polska
Head First Design Patterns. Edycja polska
Head First Design Patterns. Edycja polska
Head First Design Patterns. Edycja polska
Head First Design Patterns. Edycja polska
Head First Design Patterns. Edycja polska
Head First Design Patterns. Edycja polska
Head First Design Patterns. Edycja polska
Head First Design Patterns. Edycja polska
Head First Design Patterns. Edycja polska
Head First Design Patterns. Edycja polska
Head First Design Patterns. Edycja polska
Head First Design Patterns. Edycja polska
Head First Design Patterns. Edycja polska
Head First Design Patterns. Edycja polska
Head First Design Patterns. Edycja polska
Head First Design Patterns. Edycja polska
Head First Design Patterns. Edycja polska
Head First Design Patterns. Edycja polska
Head First Design Patterns. Edycja polska
Head First Design Patterns. Edycja polska
Head First Design Patterns. Edycja polska
Head First Design Patterns. Edycja polska
Head First Design Patterns. Edycja polska
Head First Design Patterns. Edycja polska
Head First Design Patterns. Edycja polska
Head First Design Patterns. Edycja polska
Head First Design Patterns. Edycja polska
Head First Design Patterns. Edycja polska

More Related Content

Viewers also liked

Ghidul profesorului cl 7_2012
Ghidul profesorului cl 7_2012Ghidul profesorului cl 7_2012
Ghidul profesorului cl 7_2012dragos-voda
 
ікт к к
ікт к кікт к к
ікт к кnatalibio
 
Monitoring oraz Nawigacja GPS w Internecie - Navigation trends prezentacja
Monitoring oraz Nawigacja GPS w Internecie - Navigation trends prezentacjaMonitoring oraz Nawigacja GPS w Internecie - Navigation trends prezentacja
Monitoring oraz Nawigacja GPS w Internecie - Navigation trends prezentacjaSentiOne
 
Analiza regresji - interpretacja wydruku z programu STATISTICA
Analiza regresji - interpretacja wydruku z programu STATISTICAAnaliza regresji - interpretacja wydruku z programu STATISTICA
Analiza regresji - interpretacja wydruku z programu STATISTICAKarol Wolski
 
Przestępczość zorganizowana
Przestępczość zorganizowanaPrzestępczość zorganizowana
Przestępczość zorganizowanawbgwsh
 
Przemysl Drzewny. Research & Development nr 2/2013
Przemysl Drzewny. Research & Development nr 2/2013Przemysl Drzewny. Research & Development nr 2/2013
Przemysl Drzewny. Research & Development nr 2/2013Forestor Communication
 
Czynniki wystepujace w pracy
Czynniki wystepujace w pracyCzynniki wystepujace w pracy
Czynniki wystepujace w pracyMarcin Bałanda
 

Viewers also liked (8)

Ghidul profesorului cl 7_2012
Ghidul profesorului cl 7_2012Ghidul profesorului cl 7_2012
Ghidul profesorului cl 7_2012
 
ікт к к
ікт к кікт к к
ікт к к
 
Monitoring oraz Nawigacja GPS w Internecie - Navigation trends prezentacja
Monitoring oraz Nawigacja GPS w Internecie - Navigation trends prezentacjaMonitoring oraz Nawigacja GPS w Internecie - Navigation trends prezentacja
Monitoring oraz Nawigacja GPS w Internecie - Navigation trends prezentacja
 
Qəlibçi
QəlibçiQəlibçi
Qəlibçi
 
Analiza regresji - interpretacja wydruku z programu STATISTICA
Analiza regresji - interpretacja wydruku z programu STATISTICAAnaliza regresji - interpretacja wydruku z programu STATISTICA
Analiza regresji - interpretacja wydruku z programu STATISTICA
 
Przestępczość zorganizowana
Przestępczość zorganizowanaPrzestępczość zorganizowana
Przestępczość zorganizowana
 
Przemysl Drzewny. Research & Development nr 2/2013
Przemysl Drzewny. Research & Development nr 2/2013Przemysl Drzewny. Research & Development nr 2/2013
Przemysl Drzewny. Research & Development nr 2/2013
 
Czynniki wystepujace w pracy
Czynniki wystepujace w pracyCzynniki wystepujace w pracy
Czynniki wystepujace w pracy
 

Similar to Head First Design Patterns. Edycja polska

Visual Basic .NET. Wzorce projektowe
Visual Basic .NET. Wzorce projektoweVisual Basic .NET. Wzorce projektowe
Visual Basic .NET. Wzorce projektoweWydawnictwo Helion
 
Head First Object-Oriented Analysis and Design. Edycja polska
Head First Object-Oriented Analysis and Design. Edycja polskaHead First Object-Oriented Analysis and Design. Edycja polska
Head First Object-Oriented Analysis and Design. Edycja polskaWydawnictwo Helion
 
Sztuka zarządzania projektami
Sztuka zarządzania projektamiSztuka zarządzania projektami
Sztuka zarządzania projektamiWydawnictwo Helion
 
Programowanie. Koncepcje, techniki i modele
Programowanie. Koncepcje, techniki i modeleProgramowanie. Koncepcje, techniki i modele
Programowanie. Koncepcje, techniki i modeleWydawnictwo Helion
 
Zarządzanie zasobami. Wzorce projektowe
Zarządzanie zasobami. Wzorce projektoweZarządzanie zasobami. Wzorce projektowe
Zarządzanie zasobami. Wzorce projektoweWydawnictwo Helion
 
C++. 50 efektywnych sposobów na udoskonalenie Twoich programów
C++. 50 efektywnych sposobów na udoskonalenie Twoich programówC++. 50 efektywnych sposobów na udoskonalenie Twoich programów
C++. 50 efektywnych sposobów na udoskonalenie Twoich programówWydawnictwo Helion
 
Projektowanie oprogramowania. Wstęp do programowania i techniki komputerowej
Projektowanie oprogramowania. Wstęp do programowania i techniki komputerowejProjektowanie oprogramowania. Wstęp do programowania i techniki komputerowej
Projektowanie oprogramowania. Wstęp do programowania i techniki komputerowejWydawnictwo Helion
 
100 sposobów na Visual Studio
100 sposobów na Visual Studio100 sposobów na Visual Studio
100 sposobów na Visual StudioWydawnictwo Helion
 
J2EE. Stosowanie wzorców projektowych
J2EE. Stosowanie wzorców projektowychJ2EE. Stosowanie wzorców projektowych
J2EE. Stosowanie wzorców projektowychWydawnictwo Helion
 
Programowanie skryptów powłoki
Programowanie skryptów powłokiProgramowanie skryptów powłoki
Programowanie skryptów powłokiWydawnictwo Helion
 
Programowanie zorientowane obiektowo
Programowanie zorientowane obiektowoProgramowanie zorientowane obiektowo
Programowanie zorientowane obiektowoWydawnictwo Helion
 
J2EE. Wzorce projektowe. Wydanie 2
J2EE. Wzorce projektowe. Wydanie 2J2EE. Wzorce projektowe. Wydanie 2
J2EE. Wzorce projektowe. Wydanie 2Wydawnictwo Helion
 
Język C++. Koncepcje i techniki programowania
Język C++. Koncepcje i techniki programowaniaJęzyk C++. Koncepcje i techniki programowania
Język C++. Koncepcje i techniki programowaniaWydawnictwo Helion
 
C++. Zaawansowane programowanie
C++. Zaawansowane programowanieC++. Zaawansowane programowanie
C++. Zaawansowane programowanieWydawnictwo Helion
 

Similar to Head First Design Patterns. Edycja polska (20)

C#. Wzorce projektowe
C#. Wzorce projektoweC#. Wzorce projektowe
C#. Wzorce projektowe
 
Visual Basic .NET. Wzorce projektowe
Visual Basic .NET. Wzorce projektoweVisual Basic .NET. Wzorce projektowe
Visual Basic .NET. Wzorce projektowe
 
Head First Object-Oriented Analysis and Design. Edycja polska
Head First Object-Oriented Analysis and Design. Edycja polskaHead First Object-Oriented Analysis and Design. Edycja polska
Head First Object-Oriented Analysis and Design. Edycja polska
 
Sztuka zarządzania projektami
Sztuka zarządzania projektamiSztuka zarządzania projektami
Sztuka zarządzania projektami
 
Ruby. Wzorce projektowe
Ruby. Wzorce projektoweRuby. Wzorce projektowe
Ruby. Wzorce projektowe
 
Programowanie. Od podstaw
Programowanie. Od podstawProgramowanie. Od podstaw
Programowanie. Od podstaw
 
Programowanie. Koncepcje, techniki i modele
Programowanie. Koncepcje, techniki i modeleProgramowanie. Koncepcje, techniki i modele
Programowanie. Koncepcje, techniki i modele
 
Zarządzanie zasobami. Wzorce projektowe
Zarządzanie zasobami. Wzorce projektoweZarządzanie zasobami. Wzorce projektowe
Zarządzanie zasobami. Wzorce projektowe
 
C++. 50 efektywnych sposobów na udoskonalenie Twoich programów
C++. 50 efektywnych sposobów na udoskonalenie Twoich programówC++. 50 efektywnych sposobów na udoskonalenie Twoich programów
C++. 50 efektywnych sposobów na udoskonalenie Twoich programów
 
Projektowanie oprogramowania. Wstęp do programowania i techniki komputerowej
Projektowanie oprogramowania. Wstęp do programowania i techniki komputerowejProjektowanie oprogramowania. Wstęp do programowania i techniki komputerowej
Projektowanie oprogramowania. Wstęp do programowania i techniki komputerowej
 
100 sposobów na Visual Studio
100 sposobów na Visual Studio100 sposobów na Visual Studio
100 sposobów na Visual Studio
 
J2EE. Stosowanie wzorców projektowych
J2EE. Stosowanie wzorców projektowychJ2EE. Stosowanie wzorców projektowych
J2EE. Stosowanie wzorców projektowych
 
Programowanie skryptów powłoki
Programowanie skryptów powłokiProgramowanie skryptów powłoki
Programowanie skryptów powłoki
 
Programowanie zorientowane obiektowo
Programowanie zorientowane obiektowoProgramowanie zorientowane obiektowo
Programowanie zorientowane obiektowo
 
J2EE. Wzorce projektowe. Wydanie 2
J2EE. Wzorce projektowe. Wydanie 2J2EE. Wzorce projektowe. Wydanie 2
J2EE. Wzorce projektowe. Wydanie 2
 
J2EE. Wzorce projektowe
J2EE. Wzorce projektoweJ2EE. Wzorce projektowe
J2EE. Wzorce projektowe
 
Język C++. Koncepcje i techniki programowania
Język C++. Koncepcje i techniki programowaniaJęzyk C++. Koncepcje i techniki programowania
Język C++. Koncepcje i techniki programowania
 
SolidWorks 2006 w praktyce
SolidWorks 2006 w praktyceSolidWorks 2006 w praktyce
SolidWorks 2006 w praktyce
 
C++. Zaawansowane programowanie
C++. Zaawansowane programowanieC++. Zaawansowane programowanie
C++. Zaawansowane programowanie
 
Thinking in Photoshop
Thinking in PhotoshopThinking in Photoshop
Thinking in Photoshop
 

More from Wydawnictwo Helion

Tworzenie filmów w Windows XP. Projekty
Tworzenie filmów w Windows XP. ProjektyTworzenie filmów w Windows XP. Projekty
Tworzenie filmów w Windows XP. ProjektyWydawnictwo Helion
 
Blog, więcej niż internetowy pamiętnik
Blog, więcej niż internetowy pamiętnikBlog, więcej niż internetowy pamiętnik
Blog, więcej niż internetowy pamiętnikWydawnictwo Helion
 
Pozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktyczne
Pozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktycznePozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktyczne
Pozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktyczneWydawnictwo Helion
 
E-wizerunek. Internet jako narzędzie kreowania image&#39;u w biznesie
E-wizerunek. Internet jako narzędzie kreowania image&#39;u w biznesieE-wizerunek. Internet jako narzędzie kreowania image&#39;u w biznesie
E-wizerunek. Internet jako narzędzie kreowania image&#39;u w biznesieWydawnictwo Helion
 
Microsoft Visual C++ 2008. Tworzenie aplikacji dla Windows
Microsoft Visual C++ 2008. Tworzenie aplikacji dla WindowsMicrosoft Visual C++ 2008. Tworzenie aplikacji dla Windows
Microsoft Visual C++ 2008. Tworzenie aplikacji dla WindowsWydawnictwo Helion
 
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie II
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie IICo potrafi Twój iPhone? Podręcznik użytkownika. Wydanie II
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie IIWydawnictwo Helion
 
Makrofotografia. Magia szczegółu
Makrofotografia. Magia szczegółuMakrofotografia. Magia szczegółu
Makrofotografia. Magia szczegółuWydawnictwo Helion
 
Java. Efektywne programowanie. Wydanie II
Java. Efektywne programowanie. Wydanie IIJava. Efektywne programowanie. Wydanie II
Java. Efektywne programowanie. Wydanie IIWydawnictwo Helion
 
Ajax, JavaScript i PHP. Intensywny trening
Ajax, JavaScript i PHP. Intensywny treningAjax, JavaScript i PHP. Intensywny trening
Ajax, JavaScript i PHP. Intensywny treningWydawnictwo Helion
 
PowerPoint 2007 PL. Seria praktyk
PowerPoint 2007 PL. Seria praktykPowerPoint 2007 PL. Seria praktyk
PowerPoint 2007 PL. Seria praktykWydawnictwo Helion
 
Serwisy społecznościowe. Budowa, administracja i moderacja
Serwisy społecznościowe. Budowa, administracja i moderacjaSerwisy społecznościowe. Budowa, administracja i moderacja
Serwisy społecznościowe. Budowa, administracja i moderacjaWydawnictwo Helion
 

More from Wydawnictwo Helion (20)

Tworzenie filmów w Windows XP. Projekty
Tworzenie filmów w Windows XP. ProjektyTworzenie filmów w Windows XP. Projekty
Tworzenie filmów w Windows XP. Projekty
 
Blog, więcej niż internetowy pamiętnik
Blog, więcej niż internetowy pamiętnikBlog, więcej niż internetowy pamiętnik
Blog, więcej niż internetowy pamiętnik
 
Access w biurze i nie tylko
Access w biurze i nie tylkoAccess w biurze i nie tylko
Access w biurze i nie tylko
 
Pozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktyczne
Pozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktycznePozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktyczne
Pozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktyczne
 
E-wizerunek. Internet jako narzędzie kreowania image&#39;u w biznesie
E-wizerunek. Internet jako narzędzie kreowania image&#39;u w biznesieE-wizerunek. Internet jako narzędzie kreowania image&#39;u w biznesie
E-wizerunek. Internet jako narzędzie kreowania image&#39;u w biznesie
 
Microsoft Visual C++ 2008. Tworzenie aplikacji dla Windows
Microsoft Visual C++ 2008. Tworzenie aplikacji dla WindowsMicrosoft Visual C++ 2008. Tworzenie aplikacji dla Windows
Microsoft Visual C++ 2008. Tworzenie aplikacji dla Windows
 
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie II
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie IICo potrafi Twój iPhone? Podręcznik użytkownika. Wydanie II
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie II
 
Makrofotografia. Magia szczegółu
Makrofotografia. Magia szczegółuMakrofotografia. Magia szczegółu
Makrofotografia. Magia szczegółu
 
Windows PowerShell. Podstawy
Windows PowerShell. PodstawyWindows PowerShell. Podstawy
Windows PowerShell. Podstawy
 
Java. Efektywne programowanie. Wydanie II
Java. Efektywne programowanie. Wydanie IIJava. Efektywne programowanie. Wydanie II
Java. Efektywne programowanie. Wydanie II
 
JavaScript. Pierwsze starcie
JavaScript. Pierwsze starcieJavaScript. Pierwsze starcie
JavaScript. Pierwsze starcie
 
Ajax, JavaScript i PHP. Intensywny trening
Ajax, JavaScript i PHP. Intensywny treningAjax, JavaScript i PHP. Intensywny trening
Ajax, JavaScript i PHP. Intensywny trening
 
PowerPoint 2007 PL. Seria praktyk
PowerPoint 2007 PL. Seria praktykPowerPoint 2007 PL. Seria praktyk
PowerPoint 2007 PL. Seria praktyk
 
Excel 2007 PL. Seria praktyk
Excel 2007 PL. Seria praktykExcel 2007 PL. Seria praktyk
Excel 2007 PL. Seria praktyk
 
Access 2007 PL. Seria praktyk
Access 2007 PL. Seria praktykAccess 2007 PL. Seria praktyk
Access 2007 PL. Seria praktyk
 
Word 2007 PL. Seria praktyk
Word 2007 PL. Seria praktykWord 2007 PL. Seria praktyk
Word 2007 PL. Seria praktyk
 
Serwisy społecznościowe. Budowa, administracja i moderacja
Serwisy społecznościowe. Budowa, administracja i moderacjaSerwisy społecznościowe. Budowa, administracja i moderacja
Serwisy społecznościowe. Budowa, administracja i moderacja
 
AutoCAD 2008 i 2008 PL
AutoCAD 2008 i 2008 PLAutoCAD 2008 i 2008 PL
AutoCAD 2008 i 2008 PL
 
Bazy danych. Pierwsze starcie
Bazy danych. Pierwsze starcieBazy danych. Pierwsze starcie
Bazy danych. Pierwsze starcie
 
Inventor. Pierwsze kroki
Inventor. Pierwsze krokiInventor. Pierwsze kroki
Inventor. Pierwsze kroki
 

Head First Design Patterns. Edycja polska

  • 1. IDZ DO PRZYK£ADOWY ROZDZIA£ SPIS TRE CI Head First Design Patterns. Edycja polska KATALOG KSI¥¯EK Autorzy: Eric Freeman, Elisabeth Freeman KATALOG ONLINE T³umaczenie: Pawe³ Koronkiewicz (wprowadzenie, rozdz. 1–8), Grzegorz Kowalczyk (rozdz. 9–14) ISBN: 83-7361-792-2 ZAMÓW DRUKOWANY KATALOG Tytu³ orygina³u: Head First Design Patterns Format: 200×230, stron: 656 TWÓJ KOSZYK Poznaj w niekonwencjonalny sposób zasady stosowania wzorców projektowych DODAJ DO KOSZYKA • Dowiedz siê, czym s¹ wzorce projektowe • Poznaj typy wzorców projektowych CENNIK I INFORMACJE • Zastosuj wzorce projektowe w praktyce • Naucz siê projektowaæ aplikacje w oparciu o wzorce projektowe ZAMÓW INFORMACJE Otwórz swój umys³. Poznaj wszystko, co jest zwi¹zane z wzorcami projektowymi, O NOWO CIACH w sposób gwarantuj¹cy szybkie i skuteczne opanowanie zasad ich stosowania. Zapomnij o listingach licz¹cych tysi¹ce linii, d³ugich i nu¿¹cych opisach teoretycznych ZAMÓW CENNIK oraz rozbudowanych schematach zale¿no ci. Czytaj¹c ksi¹¿kê „Head First Design Patterns. Edycja polska”, poznasz wzorce projektowe w inny sposób. Wzorce projektowe to gotowe opisy rozwi¹zañ najczê ciej spotykanych zagadnieñ zwi¹zanych z tworzeniem CZYTELNIA oprogramowania. Aby je prawid³owo stosowaæ, nale¿y poznaæ za³o¿enia, na podstawie których zosta³y stworzone, oraz nauczyæ siê implementowaæ je we w³a ciwy sposób. FRAGMENTY KSI¥¯EK ONLINE Dziêki ksi¹¿ce „Head First Design Pattern. Edycja polska” wszystkie pojêcia zwi¹zane ze wzorcami projektowymi przestan¹ byæ dla Ciebie wiedz¹ tajemn¹. Autorzy ksi¹¿ki, wykorzystuj¹c najnowsze elementy teorii uczenia, przedstawi¹ Ci wszystkie zagadnienia niezbêdne do rozpoczêcia projektowania i tworzenia aplikacji w oparciu o wzorce projektowe. Poznasz najczê ciej stosowane wzorce projektowe, metody ich implementacji i zadania, do jakich s¹ przeznaczone. Jednak, co najwa¿niejsze, nauczysz siê stosowaæ tê wiedzê w praktyce. • Cele stosowania wzorców projektowych • Za³o¿enia, na których opieraj¹ siê wzorce projektowe • Najwa¿niejsze i najczê ciej wykorzystywane wzorce projektowe • Przechowywanie i prezentacja danych Wydawnictwo Helion • Mechanizm RMI ul. Chopina 6 • Wzorzec MVC 44-100 Gliwice • Implementacja wzorców projektowych w aplikacjach tel. (32)230-98-63 Przekonaj siê, ¿e nowoczesne metody nauczania mog¹ zmieniæ równie¿ sposób e-mail: helion@helion.pl poznawania nowoczesnych technik programistycznych.
  • 2. Spis treści (skrócony) Wprowadzenie 21 1. Witamy w krainie wzorców projektowych: wprowadzenie 33 2. Jak sprawić by Twoje obiekty były zawsze dobrze poinformowane: Wzorzec Obserwator 67 3. Dekorowanie zachowania obiektów: Wzorzec Dekorator 109 4. Pizzeria zorientowana obiektowo: Wzorzec Fabryka 139 5. Obiekty jedyne w swoim rodzaju: Wzorzec Singleton 197 6. Hermetyzacja wywołań: Wzorzec Polecenie 217 7. Zdolność do adaptacji: Wzorce Adapter oraz Fasada 259 8. Hermetyzacja algorytmów: Wzorzec Metoda Szablownowa 297 9. Zarządzanie kolekcjami: Wzorce Iterator i Kompozyt 335 10. Stan obiektu: Wzorzec Stan 403 11. Kontrola dostępu do obiektu: Wzorzec Proxy 447 12. Łączenie wzorców: Wzorce złożone 517 13. Wzorce projektowe w praktyce: Nowe życie z wzorcami 595 14. Dodatek: inne wzorce 629 Skorowidz 649 Spis treści (na serio) Wprowadzenie Twój mózg jest skoncentrowany na wzorcach projektowych. W tym rozdziale Ty starasz się czegoś dowiedzieć, a Twój mózg robi Ci przysługę i nie przykłada się do zapamiętywania zdobywanej wiedzy. Twój mózg myśli sobie: „Lepiej zostawię miejsce w pamięci na bardziej istotne informacje, na przykład: jakich dzikich zwierząt należy unikać bądź czy jeżdżenie nago na snowboardzie jest dobrym pomysłem”. A zatem, w jaki sposób możesz przekonać swój mózg, że Twoje życie zależy od poznania wzorców projektowych? Dla kogo przeznaczona jest ta książka? 22 Wiemy także, co sobie myśli Twój mózg 23 Metapoznanie 25 Zmuś swój mózg do posłuszeństwa 27 Zespół recenzentów technicznych 30 Podziękowania 31 6
  • 3. Wprowadzenie do wzorców projektowych 1 Witamy w krainie wzorców projektowych Ktoś rozwiązał już Twoje problemy. W tym rozdziale dowiesz się, dlaczego (i w jaki sposób) możesz wykorzystać wiedzę i doświadczenia zdobyte przez innych projektantów i programistów, którzy podczas pracy nad różnymi projektami zmuszeni byli wstąpić na pełną zdradliwych pułapek ścieżkę i — co najważniejsze — udało im się przeżyć taką wyprawę. Zanim dobrniemy do końca rozdziału, rzucimy okiem na sposoby wykorzystywania wzorców projektowych i przedstawimy ich zalety, poznamy kilka podstawowych zasad projektowania zorientowanego obiektowo, a także omówimy sposób działania przykładowego wzorca. Najlepszą metodą zastosowania wzorca jest załadowanie go bezpośrednio do Twojego mózgu, a następnie zlokalizowanie obszarów w obrębie projektowanych rozwiązań oraz istniejących aplikacji, w których możesz je zastosować. Pracując z wzorcami projektowymi, zamiast wielokrotnego wykorzystywania tych samych fragmentów kodu, wielokrotnie wykorzystujesz swoje doświadczenia. Prosta aplikacji o nazwie SymulatorKaczki 34 Pamiętaj, Jacek rozmyśla o dziedziczeniu… 37 opanowanie takich A może by tak interfejs? 38 zagadnień, jak abstrakcyjność, dziedziczenie Jedyny pewny element w procesie tworzenia oprogramowania 40 i polimorfizm, nie zrobi jeszcze z Ciebie dobrego projektanta Oddzielanie tego, co się zmienia, od tego, co pozostaje niezmienione 42 systemów zorientowanych Projektowanie zachowania Kaczki 43 obiektowo. Prawdziwy guru zawsze myśli o stworzeniu elastycznego Testowanie kodu klasy Kaczka 50 projektu, który będzie łatwy do serwisowania i będzie Dynamiczne ustawianie zachowania 52 sobie w stanie poradzić ze Wielki diagram „ukrytych” zachowań 54 zmieniającymi się warunkami. Relacja MA może być lepsza niż JEST 55 Rozmawiając o wzorcach projektowania 56 Potęga wspólnego słownika wzorców 60 W jaki sposób mogę wykorzystywać wzorce projektowe? 61 Twoja skrzynka narzędziowa 64 Rozwiązania ćwiczeń 66 ÓZG avior fly beh ulated Twój M Encaps ace>> <<interf avior FlyBeh fly() ay FlyNoW Wings FlyWith fly() { - can’t fly! fly() { // do nothing nts duck } // impleme Duck flying vior; vior flyBeha r Client behavio FlyBeha ehav- quackB quack ehavior ulated QuackB swim() Encaps ace>> Grupa wzorców projektowych ) <<interf ior display( Quack() QuackBehav perform Fly() quack() perform ) ehavior( setFlyB ior() kBehav setQuac e meth- duck-lik // OTHER MuteQuack Squeak { quack() - can’t Quack { // do nothing quack() Duck duckie quack! Decoy quack) { // rubber nts duck Duck ){ // impleme squeak Rubber display( g Duck like a decoy quackin Object Redhead { // looks OBSERWATOR display() ck } Duck a rubberdu Mallard display() { // looks like } that holds a redhead display() { // looks like } a mallard // looks like state 8 8 8 Dog Objec t Su int 8 bje t ct Objec 8 Objects ent t Duck Objec Cat Object MVC Depend Mo ct use Obje az już całkiem Observers Automatic update/notification oller Twój Kod, ter Contr l Mode cony poprzez est nowy i wzboga Requ wzorców zastosowanie View projektowych. 7
  • 4. Wzorzec Obserwator 2 Jak sprawić, by Twoje obiekty były zawsze dobrze poinformowane Nie przegap okazji, kiedy dzieje się coś naprawdę ciekawego! Przedstawimy Ci wzorzec, który potrafi poinformować inne obiekty o tym, że wydarzyło się coś, czym powinny się zająć. Co ciekawe, obiekty mogą nawet samodzielnie decydować w czasie działania programu o tym, czy chcą być informowane o takich wydarzeniach. Wzorzec Obserwator jest jednym z najczęściej wykorzystywanych wzorców w pakiecie JDK (ang. Java Development Kit) a co najważniejsze, jest wręcz niewiarygodnie użyteczny. W niniejszym rozdziale rzucimy również okiem na relacje typu jeden-do-wielu oraz tzw. luźne związki (tak, to prawda, napisaliśmy „luźne związki”). Korzystając z wzorca Obserwator, z pewnością odmienisz swoje życie. Aplikacja sprawdzająca warunki pogodowe 69 Pod st a w y ow eg o Spotkanie z wzorcem Obserwator 74 a ni a ob ie kt p ro g ra m ow akcyjność Wydawca + Prenumerator = wzorzec Obserwator 75 Abstr ja Hermetyzac Pięciominutowe przedstawienie — obserwowany kontra obserwujący 78 Polimorfiz m Definicja wzorca Obserwator 81 ie Dziedziczen Siła luźnych zależności 83 g ra m ow a ni a R eg uł y p ro Projektowanie stacji meteorologicznej 86 ob ie kt ow eg o Implementacja stacji meteorologicznej 87 o obiektoweg ramowania Reguły prog się zmienia. Java — zastosowanie wbudowanego wzorca Obserwator 94 ji to, co hermetyzac Poddawaj dziczenie. Ciemna strona klasy java.util.Observable 101 cję nad dzie aj kompozy Przedkład interfejsów , Twoja skrzynka narzędziowa 104 tworzeniu Skonc entruj się na Rozwiązania ćwiczeń 107 entacji. a nie implem h ty, w któryc to orzyć projek i, o ile Staraj się tw bą luźno powiązane obiekty są ze so zajemnie. na siebie w oddziałują m ożliwe, nie RELACJA JEDEN-DO-WIELU Obiekt, którego stan jest obserwowany 8 8 8 Obie kt Pies Ob 8 an y int iekt w obserwo Ob iek ty za leż ne 8 Obie a kt Kaczk Obie kt Kot Obie kt Mysz Automatyczna aktualizacja Obiekty obserwujące (powiadamianie) (Observers) 8
  • 5. Wzorzec Dekorator 3 Dekorowanie zachowania obiektów W zasadzie niniejszy rozdział możemy równie dobrze zatytułować „Otwieranie oczu programistom z nadmiernymi skłonnościami do nadużywania dziedziczenia”. W tym rozdziale spróbujemy krytycznie przyjrzeć się zwyczajowym skłonnościom do nadużywania mechanizmu dziedziczenia oraz nauczymy Cię sposobów dekorowania zachowania klas w czasie działania programu przy użyciu pewnej formy kompozycji obiektów. Dlaczego? Po zapoznaniu się z technikami dekoracji zachowania klas będziesz mógł wyposażać swoje (i nie tylko) obiekty w nowe możliwości bez konieczności dokonywania jakichkolwiek modyfikacji w kodzie klas podstawowych. Witamy w „Star Caf�” 110 Reguła otwarte-zamknięte 116 Spotkanie z wzorcem Decorator 118 Konstruowanie zamówienia przy użyciu Dekoratorów 119 Definicja wzorca Decorator 121 Dekorujemy nasze Napoje 122 Tworzymy kod aplikacji „Star Caf�” 125 Dekoratory w świecie rzeczywistym: obsługa wejścia-wyjścia w języku Java 130 Zawsze sądziłem, Tworzenie własnych dekoratorów obsługi wejścia-wyjścia 132 że prawdziwi mężczyźni tworzą Twoja skrzynka narzędziowa 135 podklasy dla wszystkiego, co się tylko do tego nadaje. Tak było — do czasu, Rozwiązania ćwiczeń 136 gdy dowiedziałem się o korzyściach, jakie daje możliwość rozszerzania możliwości aplikacji na poziomie działania, a nie kompilacji. A teraz — spójrzcie tylko na mnie! 9
  • 6. Wzorzec Fabryka 4 Pizzeria zorientowana obiektowo Przygotuj się do stworzenia kilku projektów, w których zastosujemy luźne powiązania pomiędzy poszczególnymi obiektami. Stworzenie nowego obiektu to dużo więcej niż tylko proste zastosowanie operatora new. Niebawem przekonasz się, że proces ten jest operacją, która nie zawsze powinna być publicznie dostępna, a co więcej, jest operacją, która często może prowadzić do poważnych problemów z powiązaniami międzyobiektowymi. A tego byś nie chciał, prawda? Przekonaj się, w jaki sposób wzorzec Factory może uratować Cię z takiej opresji. Kiedy widzisz „nowy” obiekt, myśl o nim jako o „konkretnym” 140 Klientami fabryki abstrakcyjnej są dwa obiekty naszej klasy Pizzeria, WłoskaPizzeria i Amerykańska Pizzeria. Pizza w Obiektowie 142 WłoskaPizzeria Hermetyzacja procesu tworzenia obiektów 144 utwórzPizza() Budujemy prostą fabrykę pizzy 145 Klasa abstrakcyjna FabrykaSkładnikówPizzy jest interfejsem, który określa, w jaki sposób powinna być tworzona rodzina spokrewnionych produktów Tworzymy definicję „wzorca” Simple Factory 147 — wszystkie składniki, które są niezbędne do <<interfejs>> Ciasto zrobienia pizzy. Nowa struktura Pizzerii 150 GrubeChrupkieCiasto CienkieChrupkieCiasto <<interfejs>> FabrykaSkładnikówPizzy utwórzCiasto() Zezwalamy klasom podrzędnym na podejmowanie decyzji 151 utwórzSos() <<interfejs>> Tworzymy Pizzerię 153 utwórzSer() Sos utwórzWarzywa() utwórzPepperoni() utwórzMałże() Deklarowanie metody typu Factory (fabryka) 155 SosPomidorowy SosMarinara Spotkanie z wzorcem Metoda Fabrykująca 161 WłoskaFabrykaSkładnikówPizzy AmerykańskaFabryka SkładnikówPizzy <<interfejs>> Ser utwórzCiasto() utwórzSos() utwórzCiasto() utwórzSer() utwórzSos() Równoległa hierarchia klas 162 utwórzWarzywa() utwórzSer() utwórzPepperoni() utwórzWarzywa() SerMozzarella SerReggiano utwórzMałże() utwórzPepperoni() utwórzMałże() <<interfejs>> Małże Definicja wzorca Metoda Fabrykująca 164 Zadaniem fabryk rzeczywistych jest wytwarzanie odpowiednich MrożoneMałże ŚwieżeMałże Pizzeria mocno uzależniona 167 składników pizzy. Każda fabryka wie, w jaki sposób należy utworzyć składniki Sprawdzamy zależności pomiędzy obiektami 168 odpowiednie dla danego regionu. Każda fabryka wytwarza różne implementacje tej samej rodziny produktów. Zastosowanie reguły DIP 170 A w międzyczasie, na zapleczu Pizzerii… 174 Rodziny składników… 175 Budujemy fabryki składników pizzy 176 Fabryka Abstrakcyjna 183 Za kulisami 184 Definicja wzorca Fabryka Abstrakcyjna 186 Porównanie Metody Fabrykującej oraz Fabryki Abstrakcyjnej 190 Twoja skrzynka narzędziowa 192 Rozwiązania ćwiczeń 193 10
  • 7. Wzorzec Singleton 5 Obiekty jedyne w swoim rodzaju Kolejnym przystankiem w naszej podróży jest wzorzec Singleton, czyli nasza przepustka do kreowania jedynych w swoim rodzaju obiektów, posiadających tylko jedną instancję. Być może ucieszysz się na wieść o tym, że Singleton jest najprostszym z istniejących wzorców projektowych (przynajmniej pod względem kategorii stopnia złożoności jego diagramu klas); jak by na to nie patrzeć, jego diagram składa się tylko z jednej klasy! Ale nie wpadaj w euforię; niezależnie od prostoty diagramu klas tego wzorca na drodze prowadzącej do jego implementacji napotkamy całkiem sporo wybojów i dziur. Lepiej zapnij mocno pasy — to nie będzie takie proste jakby mogło się wydawać. Jeden i tylko jeden 198 Mały Singleton 199 Analiza klasycznej implementacji wzorca Singleton 201 Wyznania obiektu Singleton 202 Fabryka czekolady 203 Definicja wzorca Singleton 205 Uuups, mamy problem… 206 Zostań wirtualną maszyną Java 207 Jak sobie radzić z wielowątkowością? 208 Wzorzec Singleton — pytania i odpowiedzi 212 Hershey, PA Twoja skrzynka narzędziowa 214 Rozwiązania ćwiczeń 216 obiektowego ramowania Wzorce prog , dokonuje relację i jeden- dzów iektam nne. ielanie in algorytm y ob a je defin y mię się ybe wymieie zy zmieni finiu— rodz iuje po ają ydynamicznobprkt dz onrany e gy er de or oduje,zw st na StrateObs— watji i powsposóbżealkied wację dae zostajorattym dado a rf ją negoek o oryejs yzacw ator taki — po , żemodyfikazależnań.arczaąinte zależnych alający ow st do D ich hermet Dlu tegy poiektowbstrwyckty ch algorytmuiujehzetee, ejs pozw dnym do-wieekor al jena akcyjn — owdziedzic in ni rf no ie h za tkie a igo ob ane. yc lu b u brzwa A ktua dajew st ne wszys od doatycznie zauj ką liz zeokreą ja sp nion ec Stra ,mFaob yk kl nta, kt royj,tego okre definrzonśla klas h klbędzzę ic as tylko Wzorzswój daanależnieiść poaiecałych ór dzinąca — ościpozwalaniaklom podr ie miała bną do te m oda Fabryk znecznale tw auto czno zeni elez ioneor Met za ówneznac niie , ów zs ro dana ut a or ny. as alny po u ni asty algorytmwiadom jeebie obiektmianibeobkoktzapewnia, że staniektuwzazo wnia globza z w orze leton ie — ie i pe ąc sidnak tw Sing jakiej klasyąobiekt zoę ob odpowiedzialność od na używa. oferuj w ty stancj chwać,ącznie jedn ind przekazuje . rzal zyść.iscydo w funkcjonecno de i ecył ctory Metho j instanzęi. ych. cj do te Wzorzpunkt dostępu do klas podr dn Fa ob iektów tworzenie 11
  • 8. Wzorzec Polecenie 6 Hermetyzacja wywołań W niniejszym rozdziale przeniesiemy hermetyzację na zupełnie nowy poziom: mamy zamiar dokonać hermetyzacji wywołań metod. Zgadza się, dzięki hermetyzacji wywołań metod możemy wykrystalizować pewne fragmenty obliczeń tak, że obiekt wywołujący obliczenia nie musi się martwić, w jaki sposób je wykonać; po prostu wykorzystuje naszą metodę. Z takimi hermetyzowanymi wywołaniami metod możemy również dokonywać wielu zadziwiająco sprytnych operacji, takich jak na przykład zapisywanie ich do dzienników czy też ponowne wykorzystywanie w celu zaimplementowania mechanizmu Cofnij (ang. Undo) w naszej aplikacji. Poproszę Automatyka w domu i zagrodzie 218 z ę z serem łada się zapiekank słodowy. enie sk Mamy nową zabawkę! Sprawdzamy, jak działa SuperPilot… 219 w Zamówi wybranych enia. i napój pozycji iecie zamówi oraz z nk wienia e na bla u zamó ły zapisan blankiet óre zosta menu, kt utwórz Zamówi enie() Co zawiera otrzymany dysk CD-R 220 Zap ieka nkaz se rem odow y A w międzyczasie w naszym barze szybkiej obsługi… 223 ój sł Nap Przyjrzyjmy się nieco dokładniej wzajemnym interakcjom… 224 Klient wie już, czego Zadania i zakresy odpowiedzialności 225 chce, Od Baru do wzorca Polecenie 227 ie. zamówien i składa pobierzZamó wienie() się Nasze pierwsze POLECENIE 229 klienta i kiedy już Zamówienie od Metoda ta Kelnerka przyjmuje metodę realizujZamówienie(). z tym upora, wywo rozpoczyna proce łuje s realizacji Zamó wienia złożonego przez klienta. Definicja wzorca Polecenie 232 Wzorzec Command i SuperPilot 234 cje Kucharz realizuje instruk podane w Zamówieniu przygotowuje odpowi i edni Implementujemy SuperPilota 236 ) ie( ien posiłek. ów Sprawdzamy możliwości naszego SuperPilota 238 m jZa zu ali re dują r Burge lt znaj Ma ieniu kcje amów stru y Na Z szelkie in tego, ab y się w dne do właściw eruje apiekankę (), Nadszedł wreszcie czas, aby utworzyć trochę dokumentacji… 241 kt ezbę tować ienie ki ując przygotujZ apój() du ni pro go ów ug przygotujN przy k. Zam rza, posł k łe posi ą Kucha takimi, ). i prac etodam iekankę( ja Implementacja mechanizmu wycofywania przy użyciu stanów 246 y się m gotujZap cow zy koń pr Każdy pilot powinien posiadać tryb Impreza! 250 Zastosowanie makropoleceń 251 Kolejne zastosowania wzorca Polecenie — kolejkowanie żądań 254 Kolejne zastosowania wzorca Polecenie — żądania rejestracji 255 Twoja skrzynka narzędziowa 256 Rozwiązania ćwiczeń 258 12
  • 9. Wzorce Adapter oraz Fasada 7 Zdolność do adaptacji W niniejszym rozdziale mamy zamiar dokonać paru niesamowitych wyczynów z dziedziny rzeczy niemożliwych, takich jak na przykład włożenie kwadratowego kołka do okrągłego otworu. Brzmi nierealnie? Nie wtedy, kiedy mamy pod ręką odpowiednie wzorce projektowe. Pamiętasz wzorzec Dekorator? Podczas pracy z nim owijaliśmy obiekty innymi obiektami tak, aby nadać im nowe zachowania. Teraz mamy zamiar postępować tak samo, ale w nieco innym celu: chcemy sprawić, by ich interfejsy wyglądały jak coś, czym nie są. Dlaczego jednak mielibyśmy to robić? Na przykład po to, aby zaadaptować projekt oczekujący danego interfejsu do klasy, która implementuje zupełnie inny interfejs. To jeszcze nie wszystko; skoro już jesteśmy przy tym temacie, przyjrzymy się również innemu wzorcowi, który owija obiekty w celu uproszczenia ich interfejsów. Europejski standard ściennego gniazda elektrycznego Adaptery są wśród nas 260 Adaptery zorientowane obiektowo 261 Wzorzec Adapter bez tajemnic 265 Definicja wzorca Adapter 267 Adapter Adaptery obiektów i klas 268 Temat dzisiejszej wieczornej pogawędki: Adapter obiektów i Adapter klas 271 Adaptery w świecie rzeczywistym 272 Adaptujemy interfejs Enumeration do wymagań interfejsu Iterator 273 Standardowa wtyczka zasilająca Temat dzisiejszej wieczornej pogawędki: wzorce Dekorator i Adapter 276 Nie ma to jak kino domowe 279 Światła, kamera, fasada! 282 Konstruujemy fasadę naszego systemu kina domowego 285 Definicja wzorca Fasada 288 Reguła ograniczania interakcji 289 Twoja skrzynka narzędziowa 294 Rozwiązania ćwiczeń 296 Obiekt adaptowany e() ac zon T łum Klient żądanie anie () żąd Klient jest zaprojektowany niezgodnie z wymogami interfejsu docelowego. Adapter interfejs obiektu adaptowa nego obiektu Indyk to interfejs y low adaptowanego. doce rfejs Adapter implementuje interfejs inte docelowy i przechowuje fejs anego. ntuje inter instancję obiektu adaptow impleme dapter IndykA Kaczka. y docelow 13
  • 10. Wzorzec Metoda Szablonowa 8 Hermetyzacja algorytmów Jesteśmy jak w transie: hermetyzowaliśmy już proces tworzenia obiektów, wywołania metod, złożone interfejsy, kaczki, indyki, pizze… ciekawe, co będzie następne? Otóż, teraz mamy zamiar zająć się hermetyzacją fragmentów algorytmów, tak aby klasy podrzędne mogły „podczepiać się” w różnych miejscach wykonywanych obliczeń. Co więcej, zajmiemy się również regułą projektowania, której korzenie wywodzą się w prostej linii z … Hollywood. Tworzymy klasy reprezentujące kawę i herbatę (w języku Java) 299 Kawa i herbata, czyli klasy abstrakcyjne 302 Ciągniemy nasz projekt o krok dalej… 303 Wydobywanie metody recepturaParzenia() 304 Czego już dokonaliśmy? 307 Zauważyliśmy, że dwie receptury są bardzo do siebie podobne, chociaż niektóre Spotkanie z wzorcem Metoda Szablonowa 308 ich etapy wymagają różnych implementacji. Dzięki temu spostrzeżeniu mogliśmy Zróbmy sobie herbatę… 309 Herbata uogólnić recepturę i umieścić ją Kawa y. w klasie bazowej. 1 Zagrzej Co nam daje zastosowanie metody szablonowej? 310 ednią ilość wod odpowied Zagrzej odpowi nią ilość wody. Definicja wzorca Metoda Szablonowa 311 1 2 Zalej wrzą y do wrzątku. tkiem od 2 Włó ż torebkę herbat 3 Nalej kawy mierzoną porcję ka i. do filiżank wy. baty do filiżank 3 Nalej her Napoje 4 Dodaj cu kier i ml i. eko do sm Bliskie spotkania z kodem aplikacji 312 4 Dodaj cytryn ę do smaku. aku. zawierające Haczyk na wzorzec Metoda Szablonowa… 314 kofeinę uogólnienie 1 Zagrzej odpowiednią ilość wody. uogólnienie Zastosowanie haczyka 315 2 Zaparz napój. Testujemy naszą aplikację 316 niektóre etapy 3 Nalej uzyskany napój do filiżanki. niektóre etapy delegowane są do klasy podrzędneja 4 Domieszaj do napoju odpowiednie delegowane są do klasy podrzędneja Reguła Hollywood 318 rbata dodatki. Podklas dklasa He a Kawa Reguła Hollywood a wzorzec Metoda Szablonowa 319 Po Wzorzec Metoda Szablonowa w głębokiej kniei… 321 2 Włóż torebkę herbaty do wrzątku. Klasa NapójZKo feiną doskonale zna 2 Zaparz odmier zoną porcję Sortowanie przy użyciu wzorca Metoda Szablonowa 322 4 Dodaj cytrynę. y receptury, choć poszczególne etap etap pierwszy kawy. sama wykonuje tylko i trzeci, zostawiają c realizację 4 Dodaj cuk ier i mleko. A teraz musimy posortować trochę kaczek… 323 i czwartego etapów drugiego Porównywanie kaczek z innymi kaczkami 324 ata. klasom Kawa i Herb Robimy maszynę do sortowania kaczek 326 Zabawy z ramkami 328 Aplety Java 329 Temat dzisiejszej wieczornej pogawędki: wzorce Metoda Szablonowa oraz Strategia 330 Twoja skrzynka narzędziowa 332 Rozwiązania ćwiczeń 333 14