You are on page 1of 17

IDZ DO

PRZYKADOWY ROZDZIA
SPIS TRECI

KATALOG KSIEK
KATALOG ONLINE
ZAMW DRUKOWANY KATALOG

TWJ KOSZYK
DODAJ DO KOSZYKA

CENNIK I INFORMACJE
ZAMW INFORMACJE
O NOWOCIACH
ZAMW CENNIK

CZYTELNIA
FRAGMENTY KSIEK ONLINE

Wydawnictwo Helion
ul. Chopina 6
44-100 Gliwice
tel. (32)230-98-63
e-mail: helion@helion.pl

Visual Basic.

Wzorce projektowe
Autorzy: James W. Cooper
Tumaczenie: Jaromir Senczyk
Tytu oryginau: Visual Basic. Design Patterns. VB 6.0
and VB.NET
ISBN: 83-7197-710-7
Liczba stron: 440
Ta ksika jest praktycznym podrcznikiem tworzenia programw w jzyku Visual Basic
(w wersji 6 oraz .NET) wykorzystujcych wzorce projektowe. Moe suy take jako
krtkie wprowadzenie do programowania w nowej wersji .NET jzyka Visual Basic.
Wzorce projektowe omwiono w niej w szeregu krtkich rozdziaw, z ktrych kady
przedstawia jeden wzorzec i ilustruje jego wykorzystanie za pomoc jednego lub wicej
kompletnych i dziaajcych programw z okienkowym interfejsem uytkownika. Kady
rozdzia zawiera te diagramy UML ilustrujce powizania pomidzy klasami
wystpujcymi w implementacji wzorca.
Dziki niniejszej ksice czytelnik dowie si, e wzorce projektowe stanowi
powszechnie stosowany sposb organizacji obiektw w programach w celu ich
uproszczenia i uatwienia pniejszych modyfikacji. Wzorce projektowe wprowadzaj
take zasb nowych poj, dziki ktremu atwiej mona opisa konstrukcje tworzonych
programw.
Programici w trakcie zapoznawania si z tematyk wzorcw projektowych doznaj
zwykle momentu olnienia odkrywajc potg poznawanego wzorca. Moment ten
oznacza, e wanie uwiadomili sobie, w jaki sposb mog wykorzysta dany wzorzec
w swojej pracy.

Spis treci
Przedmowa......................................................................................................... 13

Cz I
Rozdzia 1.

Programowanie obiektowe w jzyku Visual Basic ..........15


Czym s wzorce projektowe? ......................................................... 17
Definicja wzorcw projektowych ..................................................................................18
Proces uczenia si ..........................................................................................................20
Studiowanie wzorcw projektowych .............................................................................21
Uwagi na temat podejcia obiektowego.........................................................................21
Wzorce projektowe w Visual Basicu .............................................................................22
Jak zorganizowana jest ta ksika? ................................................................................22

Rozdzia 2.

Diagramy UML............................................................................... 23
Dziedziczenie .................................................................................................................24
Interfejsy ........................................................................................................................25
Kompozycja ...................................................................................................................26
Adnotacje .......................................................................................................................27
Diagramy UML program WithClass.........................................................................27
Pliki projektw Visual Basica........................................................................................28

Rozdzia 3.

Klasy i obiekty w Visual Basicu...................................................... 29


Prosty program konwersji temperatur............................................................................29
Tworzenie klasy Temperature........................................................................................30
Konwersja na stopnie Kelvina ................................................................................32
Przesunicie decyzji do klasy Temperature ...................................................................32
Zastosowanie klas do konwersji wartoci i formatu ......................................................34
Obsuga niedozwolonych wartoci .........................................................................36
Klasa String Tokenizer...................................................................................................36
Klasy i obiekty ...............................................................................................................38
Zawieranie klas .......................................................................................................40
Inicjalizacja klasy...........................................................................................................40
Klasy i metody typu Property ........................................................................................41
Kolejny przykad interfejsu klasy woltomierz ..........................................................43
Klasa vbFile ...................................................................................................................43
Styl programowania w Visual Basicu ............................................................................45
Podsumowanie ...............................................................................................................46

Rozdzia 4.

Programowanie obiektowe............................................................. 47
Tworzenie obiektw w Visual Basicu ...........................................................................48
Tworzenie instancji obiektw ........................................................................................49
Program do pomiaru odlegoci .....................................................................................49
Metody wewntrz obiektw...........................................................................................50
Zmienne .........................................................................................................................50

Visual Basic. Wzorce projektowe


Przekazywanie parametrw przez referencj i przez warto........................................51
argon obiektowy ..........................................................................................................51

Rozdzia 5.

Tworzenie kontrolek w Visual Basicu.............................................. 53


Podwietlone pole tekstowe ...........................................................................................53
Zmiana wymiarw kontrolki...................................................................................55
Testowanie kontrolki HiText .........................................................................................55
Waciwoci i metody kontrolki ....................................................................................56
Kompilacja .....................................................................................................................57
Podsumowanie ...............................................................................................................57

Rozdzia 6.

Dziedziczenie i interfejsy................................................................ 59
Interfejsy ........................................................................................................................59
Symulator inwestycji......................................................................................................60
Implementacja symulatora .............................................................................................61
Kiedy uy interfejsu? ...................................................................................................62
Metody wsplne .............................................................................................................65
Interfejsy ukryte .............................................................................................................66
Podsumowanie ...............................................................................................................67

Rozdzia 7.

Wprowadzenie do jzyka Visual Basic .NET .................................... 69


Rnice w skadni Visual Basic .NET ...........................................................................69
Ulepszona skadnia funkcji .....................................................................................70
Deklaracje zmiennych i ich zakresy...............................................................................71
Obiekty w Visual Basic .NET.................................................................................72
Opcje kompilatora..........................................................................................................73
Zmienne numeryczne w Visual Basic .NET ...........................................................74
Waciwoci w jzyku Visual Basic wersja 6 i VB.NET ..............................................74
Skrcona notacja operacji przypisania ............................................................................75
Jzyki prekompilowane i zarzdzanie pamici ............................................................76
Klasy w Visual Basic .NET ...........................................................................................76
Tworzenie aplikacji w rodowisku Visual Basic .NET .................................................78
Najprostszy program okienkowy w Visual Basic .NET ................................................79
Zastosowanie dziedziczenia ...........................................................................................81
Konstruktory ..................................................................................................................82
Programowanie grafiki w Visual Basic .NET................................................................84
Podpowiedzi i kursory ...................................................................................................85
Przecianie metod ........................................................................................................85
Dziedziczenie w jzyku Visual Basic .NET......................................................................86
Przestrzenie nazw...........................................................................................................87
Klasa Square............................................................................................................88
Dostp do skadowych klasy..........................................................................................89
Zastpowanie metod w klasach pochodnych .................................................................89
Przecianie i przesanianie ...........................................................................................90
Zastpowanie kontrolek .................................................................................................92
Interfejsy ........................................................................................................................93
Podsumowanie ...............................................................................................................94

Rozdzia 8.

Tablice, pliki oraz wyjtki w Visual Basic .NET ............................... 95


Tablice............................................................................................................................95
Kolekcje .........................................................................................................................97
Klasa ArrayList .......................................................................................................97
Tablice z kodowaniem mieszajcym ......................................................................98
Klasa SortedList ......................................................................................................98
Wyjtki...........................................................................................................................98
Obsuga wielu wyjtkw................................................................................................99

Spis treci

5
Wywoywanie wyjtkw..............................................................................................100
Operacje na plikach......................................................................................................100
Klasa File ..............................................................................................................101
Odczyt danych z pliku tekstowego .......................................................................102
Zapis danych w pliku tekstowym..........................................................................102
Wyjtki a operacje na plikach ......................................................................................102
Sprawdzanie osignicia koca pliku ..........................................................................103
Klasa FileInfo...............................................................................................................103
Klasa vbFile .................................................................................................................104

Cz II
Rozdzia 9.

Wzorce konstrukcyjne ................................................107


Wzorzec Simple Factory............................................................... 109
Sposb dziaania wzorca Simple Factory ....................................................................109
Przykadowy program ..................................................................................................110
Klasy pochodne............................................................................................................110
Klasa Simple Factory ...................................................................................................111
Uycie fabryki.......................................................................................................112
Implementacja fabryki w Visual Basic .NET ..............................................................113
Fabryki w obliczeniach matematycznych ....................................................................114
Zagadnienia do przemylenia.......................................................................................115

Rozdzia 10. Wzorzec Factory Method ............................................................. 117


Klasa Swimmer ............................................................................................................120
Klasa Events i jej klasy pochodne................................................................................120
Rozstawienie bezporednie ..........................................................................................122
Rozstawienie okalajce .........................................................................................123
Program rozstawiajcy .................................................................................................124
Jeszcze jedno zastosowanie fabryki .............................................................................124
Program rozstawiajcy w Visual Basic .NET ..............................................................125
Kiedy naley uywa wzorca Factory Method? ..........................................................127
Zagadnienia do przemylenia.......................................................................................128

Rozdzia 11. Wzorzec Abstract Factory ............................................................ 129


Abstract Factory i projektowanie ogrodw .....................................................................129
Interfejs uytkownika programu Gardener ..................................................................131
Abstract Factory w Visual Basic .NET ........................................................................133
PictureBox.............................................................................................................135
Obsuga zdarze wyboru.......................................................................................135
Rozbudowa programu o kolejne klasy.........................................................................137
Konsekwencje stosowania wzorca Abstract Factory ...................................................137
Zagadnienia do przemylenia.......................................................................................137

Rozdzia 12. Wzorzec Singleton ....................................................................... 139


Wzorzec Singleton i metody statyczne ........................................................................139
Obsuga bdw............................................................................................................141
Globalny punkt dostpu ...............................................................................................141
Kontrolka MSComm i wzorzec Singleton ...................................................................142
Porty dostpne w systemie ....................................................................................143
Wzorzec Singleton w Visual Basic .NET ....................................................................144
Zastosowanie konstruktora o dostpie prywatnym ...............................................145
Obsuga bdw.....................................................................................................145
Program SpoolDemo....................................................................................................146
Globalny punkt dostpu ...............................................................................................148
Inne konsekwencje wzorca Singleton ..........................................................................148
Zagadnienia do przemylenia.......................................................................................148

Visual Basic. Wzorce projektowe

Rozdzia 13. Wzorzec Builder........................................................................... 149


Program do ledzenia inwestycji..................................................................................150
Zastosowanie wzorca Builder ......................................................................................151
Budowniczy okna listy wyboru....................................................................................153
Budowniczy okna pl wyboru .....................................................................................154
Implementacja wzorca Builder w Visual Basic .NET .................................................155
Klasa StockFactory ...............................................................................................156
Klasa CheckChoice ...............................................................................................157
Klasa ListboxChoice .............................................................................................158
Kolekcje obiektw klasy Items ....................................................................................159
Ostateczna wersja programu .................................................................................160
Konsekwencje zastosowania wzorca Builder ..............................................................160
Zagadnienia do przemylenia.......................................................................................162

Rozdzia 14. Wzorzec Prototype ...................................................................... 163


Klonowanie obiektw w Visual Basicu wersja 6.........................................................164
Zastosowanie prototypu ...............................................................................................164
Zastosowanie wzorca Prototype...................................................................................167
Dodatkowe metody w klasach pochodnych..........................................................168
Rne klasy o wsplnym interfejsie .....................................................................169
Meneder prototypw ..................................................................................................171
Wzorzec Prototype w Visual Basic .NET ....................................................................172
Konsekwencje stosowania wzorca Prototype ..............................................................175
Zagadnienia do przemylenia.......................................................................................176
Podsumowanie wzorcw konstrukcyjnych ..................................................................176

Cz III

Wzorce strukturalne ...................................................177

Rozdzia 15. Wzorzec Adapter ......................................................................... 179


Przenoszenie danych pomidzy listami .......................................................................179
Zastosowanie MSFlexGrid ..........................................................................................180
Wykorzystanie TreeView ............................................................................................183
Adapter obiektw ..................................................................................................183
Adaptery w Visual Basic .NET....................................................................................184
Adapter kontrolki TreeView w VisualBasic.NET .......................................................186
Zastosowanie DataGrid................................................................................................187
Adapter klas .................................................................................................................188
Adaptery podwjne ......................................................................................................189
Adaptery obiektw i adaptery klas w Visual Basic .NET............................................190
Adaptery dynamiczne ..................................................................................................190
Adaptery w jzyku Visual Basic ..................................................................................190
Zagadnienia do przemylenia.......................................................................................190

Rozdzia 16. Wzorzec Bridge ........................................................................... 191


Klasy visList ................................................................................................................194
Diagram klas ................................................................................................................194
Rozbudowa mostu........................................................................................................195
Kontrolki ActiveX jako mosty .....................................................................................196
Wzorzec Bridge w Visual Basic .NET.........................................................................198
Klasa ProductList ..................................................................................................198
Klasa ProductTable ...............................................................................................199
Wczytywanie danych ............................................................................................200
Zamiana stron mostu ....................................................................................................201
Konsekwencje stosowania wzorca Bridge.....................................................................202
Zagadnienia do przemylenia.......................................................................................202

Spis treci

Rozdzia 17. Wzorzec Composite ..................................................................... 203


Implementacja kompozytu ...........................................................................................204
Obliczanie wynagrodze..............................................................................................204
Klasa Employee ...........................................................................................................205
Klasa Subords ..............................................................................................................207
Klasa Boss....................................................................................................................208
Tworzymy drzewo pracownikw.................................................................................209
Awans pracownika .......................................................................................................211
Listy dwukierunkowe...................................................................................................212
Konsekwencje stosowania wzorca Composite ............................................................213
Uproszczony wzorzec Composite ................................................................................213
Kompozyty w jzyku Visual Basic ..............................................................................214
Wzorzec Composite w Visual Basic .NET .....................................................................214
Wyliczenie.............................................................................................................215
Konstruktory klasy Boss .......................................................................................216
Inne zagadnienia implementacji wzorca ......................................................................217
Zagadnienia do przemylenia.......................................................................................217

Rozdzia 18. Wzorzec Decorator ...................................................................... 219


Dekorator CoolButton..................................................................................................219
Zastosowanie dekoratora..............................................................................................222
Kontrolki ActiveX jako dekoratory .............................................................................225
Dekorator w Visual Basic .NET ..................................................................................225
Dekoratory niewizualne ...............................................................................................227
Dekoratory, adaptery i kompozyty...............................................................................228
Konsekwencje stosowania wzorca Decorator..............................................................228
Zagadnienia do przemylenia.......................................................................................228

Rozdzia 19. Wzorzec Facade .......................................................................... 229


Czym jest baza danych? ...............................................................................................229
Uzyskiwanie informacji z bazy danych .......................................................................231
Systemy baz danych.....................................................................................................231
ODBC...........................................................................................................................232
Poczenia do baz danych w jzyku Visual Basic .......................................................232
Struktura dostpu do bazy danych ...............................................................................232
Klasa DBase ..........................................................................................................233
Budujemy fasad..........................................................................................................235
Klasa Stores...........................................................................................................237
Tworzymy tabele Stores oraz Foods ............................................................................239
Tabela Price..................................................................................................................239
Zapytanie o cen ...................................................................................................241
Podsumowanie wzorca Facade ....................................................................................242
Wykorzystanie interfejsu ADO w jzyku Visual Basic...............................................243
Poczenia ADO....................................................................................................243
Przeszukiwanie i dodawanie rekordw.................................................................244
Wykorzystanie rozszerze interfejsu ADO...........................................................244
Klasa DBase wykorzystujca ADO .............................................................................245
Dostp do baz danych w Visual Basic .NET...................................................................248
Wykorzystanie ADO.NET ...........................................................................................249
Poczenie do bazy danych ...................................................................................249
Odczyt danych z bazy ...........................................................................................249
Wykonanie zapytania ............................................................................................250
Usuwanie danych z tabeli......................................................................................250
Dodawanie rekordw do tabeli za pomoc ADO.NET................................................251
Fasada ADO w Visual Basic .NET ..............................................................................252
Klasa DBTable ......................................................................................................253

Visual Basic. Wzorce projektowe


Klasy Stores i Foods ....................................................................................................254
Klasa Prices..................................................................................................................256
Zaadowanie danych do bazy .......................................................................................257
Kocowa posta programu...........................................................................................259
W jaki sposb dziaa fasada? .......................................................................................260
Konsekwencje stosowania wzorca Facade ..................................................................260
Zagadnienia do przemylenia.......................................................................................260

Rozdzia 20. Wzorzec Flyweight....................................................................... 261


Omwienie ...................................................................................................................262
Przykad zastosowania wzorca Flyweight.......................................................................262
Diagram klas .........................................................................................................265
Wybr folderu .......................................................................................................265
Implementacja wzorca Flyweight w jzyku Visual Basic .NET..................................267
Zastosowanie wzorca Flyweight w jzyku Visual Basic .............................................270
Obiekty wspdzielone.................................................................................................271
Obiekty kopiowane podczas zapisu .............................................................................271
Zagadnienia do przemylenia.......................................................................................271

Rozdzia 21. Wzorzec Proxy............................................................................. 273


Przykadowy program ..................................................................................................274
Implementacja wzorca Proxy w jzyku Visual Basic .NET ........................................275
Wzorzec Proxy w jzyku Visual Basic ........................................................................277
Kopiowanie podczas zapisu .........................................................................................277
Porwnanie z innymi wzorcami...................................................................................278
Zagadnienia do przemylenia.......................................................................................278
Podsumowanie wzorcw strukturalnych.........................................................................278

Cz IV

Wzorce czynnociowe.................................................279

Rozdzia 22. Wzorzec Chain of Responsibility................................................... 281


Zastosowania wzorca ...................................................................................................282
Przykadowy program ..................................................................................................282
Listy .............................................................................................................................285
Implementacja systemu pomocy ..................................................................................287
Obsuga polecenia pomocy ...................................................................................289
acuch czy drzewo?...................................................................................................290
Wzorzec Chain of Responsibility w Visual Basic .NET .............................................291
Rodzaje obsugiwanych da .....................................................................................293
Zastosowanie wzorca w jzyku Visual Basic ..............................................................293
Konsekwencje stosowania wzorca Chain of Responsibility........................................294
Zagadnienia do przemylenia.......................................................................................294

Rozdzia 23. Wzorzec Command ...................................................................... 295


Motywacja....................................................................................................................295
Polecenie jako obiekt ...................................................................................................296
Konstrukcja obiektw Command.................................................................................297
Tablice polece ............................................................................................................298
Konsekwencje stosowania wzorca Command .............................................................301
Implementacja funkcji Undo........................................................................................301
Wzorzec Command w Visual Basic .NET...................................................................305
Interfejs CommandHolder............................................................................................307
Implementacja funkcji Undo w Visual Basic .NET.....................................................310
Wzorzec Command w jzyku Visual Basic .................................................................312
Zagadnienia do przemylenia.......................................................................................312

Spis treci

Rozdzia 24. Wzorzec Interpreter ..................................................................... 313


Motywacja....................................................................................................................313
Zastosowania................................................................................................................313
Przykad prostego raportu ............................................................................................314
Interpreter jzyka .........................................................................................................315
Obiekty uywane podczas parsowania ........................................................................316
Redukcja tokenw do operacji .....................................................................................319
Implementacja wzorca Interpreter................................................................................320
Drzewo skadni......................................................................................................321
Implementacja wzorca Interpreter w Visual Basicu wersja 6......................................324
Obiekty uywane podczas parsowania ........................................................................326
Konsekwencje stosowania wzorca Interpreter .............................................................327
Zagadnienia do przemylenia.......................................................................................328

Rozdzia 25. Wzorzec Iterator.......................................................................... 329


Motywacja....................................................................................................................329
Przykad iteratora w Visual Basicu wersja 6 ...................................................................330
Pobranie iteratora ..................................................................................................331
Iteratory filtrujce ........................................................................................................332
Wyliczenie filtrowane ...........................................................................................332
Iteratory w Visual Basic .NET .....................................................................................333
Konsekwencje stosowania wzorca Iterator....................................................................335

Rozdzia 26. Wzorzec Mediator........................................................................ 337


Przykadowy system ....................................................................................................337
Interakcje pomidzy elementami interfejsu .................................................................338
Przykadowy program ..................................................................................................339
Inicjalizacja systemu .............................................................................................342
Mediatory i obiekty polece ........................................................................................342
Wzorzec Mediator w jzyku Visual Basic .NET .........................................................342
Inicjalizacja ...........................................................................................................344
Obsuga zdarze dla nowych kontrolek ................................................................345
Konsekwencje stosowania wzorca Mediator ...............................................................346
Mediator z pojedynczym interfejsem...........................................................................347
Kwestie implementacji.................................................................................................347

Rozdzia 27. Wzorzec Memento ....................................................................... 349


Motywacja....................................................................................................................349
Implementacja ..............................................................................................................350
Przykadowy program ..................................................................................................350
Ostrzeenie............................................................................................................356
Obiekty polece interfejsu uytkownika.........................................................................356
Obsuga pozostaych zdarze.......................................................................................357
Implementacja wzorca Memento w jzyku Visual Basic .NET ..................................358
Konsekwencje stosowania wzorca Memento ..............................................................360
Zagadnienia do przemylenia.......................................................................................360

Rozdzia 28. Wzorzec Observer ........................................................................ 361


Obserwacja zmian kolorw..........................................................................................362
Implementacja wzorca Observer w jzyku Visual Basic .NET ...................................364
Inne rodzaje komunikatw...........................................................................................366
Konsekwencje stosowania wzorca Observer ...............................................................366
Zagadnienia do przemylenia.......................................................................................367

10

Visual Basic. Wzorce projektowe

Rozdzia 29. Wzorzec State ............................................................................. 369


Przykadowy program ..................................................................................................369
Przeczanie stanw .....................................................................................................373
Interakcja pomidzy klasami Mediator i StateManager...............................................374
Klasa FillState ..............................................................................................................377
Lista wycofa operacji .................................................................................................378
Wypenianie okrgw w Visual Basicu wersja 6..................................................380
Implementacja wzorca Pattern w jzyku Visual Basic .NET ......................................381
Mediator klasa wszechwiedzca? ...........................................................................385
Konsekwencje stosowania wzorca State .........................................................................386
Przejcia pomidzy stanami .........................................................................................386
Zagadnienia do przemylenia.......................................................................................386

Rozdzia 30. Wzorzec Strategy ........................................................................ 387


Motywacja....................................................................................................................387
Przykadowy program ..................................................................................................388
Kontekst .......................................................................................................................389
Polecenia programu......................................................................................................390
Strategie dla wykresu liniowego i wykresu supkowego .............................................390
Tworzenie wykresw w jzyku Visual Basic ..............................................................391
Implementacja wzorca Strategy w jzyku Visual Basic .NET ....................................392
Konsekwencje stosowania wzorca Strategy ................................................................396

Rozdzia 31. Wzorzec Template Method........................................................... 397


Motywacja....................................................................................................................397
Rodzaje metod w klasie bazowej .................................................................................398
Przykadowy program ..................................................................................................399
Klasa StdTriangle..................................................................................................400
Klasa IsoscelesTriangle.........................................................................................401
Program rysujcy trjkty ............................................................................................402
Szablony i wywoania zwrotne ....................................................................................403
Konsekwencje stosowania wzorca Template Method .................................................404

Rozdzia 32. Wzorzec Visitor ........................................................................... 405


Motywacja....................................................................................................................405
Zastosowania wzorca Visitor .......................................................................................406
Przykadowy program ..................................................................................................407
Wizytowanie obiektw jednej klasy ............................................................................408
Wizytowanie obiektw wielu klas ...............................................................................409
Kierownicy s take pracownikami!............................................................................410
Uniwersalno wizytatora ............................................................................................411
Podwjne wywoania ...................................................................................................412
Po co to wszystko? .......................................................................................................412
Wizytowanie serii obiektw.........................................................................................413
Implementacja wzorca Visitor w Visual Basicu wersja 6............................................413
Konsekwencje stosowania wzorca Visitor ......................................................................416
Zagadnienia do przemylenia.......................................................................................416

Spis treci

11

Dodatki .......................................................................................417
Dodatek A

Przykady na serwerze FTP ........................................................... 419

Bibliografia....................................................................................................... 423
Skorowidz......................................................................................................... 425

Rozdzia 28.

Wzorzec Observer
W tym rozdziale przedstawimy, w jaki sposb zastosowa wzorzec Observer do prezentacji tych samych danych jednoczenie w kilku rnych formach. Jest to czste wymaganie w programach pisanych dla systemw posiadajcych okienkowy interfejs uytkownika. Na przykad program umoliwiajcy analiz cen akcji moe prezentowa
dane za pomoc wykresu, tabeli i listy. Kada zmiana cen akcji powinna automatycznie
spowodowa odpowiedni zmian we wszystkich formach prezentacji.
Do takiego sposobu dziaania przyzwyczaiy nas popularne programy, jak na przykad
arkusz kalkulacyjny Excel. Z drugiej strony system Windows nie zawiera adnego wsparcia umoliwiajcego jego atw implementacj. Gdyby nawet tak byo, to i tak programowanie z wykorzystaniem API systemu Windows w jzyku C jest do skomplikowane. Tymczasem w programach pisanych w jzyku Visual Basic moemy osign
podany efekt stosujc wzorzec Observer.
Wzorzec Observer zakada, e osobne obiekty reprezentuj dane programu, a osobne
zajmuj si ich prezentacj, oraz e te drugie obserwuj zmiany zachodzce w danych.
Sytuacj t ilustruje schemat przedstawiony na rysunku 28.1.
Rysunek 28.1.
Prezentacja
danych za
pomoc listy
oraz w postaci
graficznej

Implementujc wzorzec Observer, dane okrelamy zwykle jako podmiot (ang. Subject),
a kad z form jego prezentacji mianem obserwatora (ang. Observer). Kady z obserwatorw zgasza podmiotowi zainteresowanie jego danymi poprzez wywoanie metody
podmiotu. Kady z obserwatorw musi te posiada znany podmiotowi interfejs, ktrego
metody podmiot wywouje, gdy zajdzie zmiana w jego danych. Oba te interfejsy moemy zdefiniowa na przykad jak poniej.

Cz IV Wzorce czynnociowe

362

 
 

 






 
 

  

 



Korzyci pync ze zdefiniowania tych interfejsw jest to, e mog je atwo implementowa praktycznie dowolne klasy bez wzgldu na ich rzeczywist funkcjonalno.

Obserwacja zmian kolorw


Napiszmy zatem prosty program ilustrujcy wykorzystanie opisanej koncepcji. Jego
interfejs uytkownika zawiera bdzie trzy przyciski wyboru, jak przedstawiono to na
rysunku 28.2.
Rysunek 28.2.
Program
umoliwiajcy
zmian danych
o kolorach

Klasa okna programu bdzie implementowa interfejs . Oznacza to, e musi
udostpni metod umoliwiajc obserwatorom zgoszenie zainteresowania przechowywanymi przez ni danymi. Metoda 
   bdzie umieszcza kolejnego
obserwatora w kolekcji.
 

    

 

   !




W programie utworzymy dwa obiekty reprezentujce obserwatorw. Jeden bdzie pokazywa wybrany kolor i jego nazw, a drugi doda kolor do listy.
 

" #


  
$
%
&

'%()
 %
 

*
 

%
  

 !
+

 !,%

*


%
&"

!
+

!,%



Rozdzia 28. Wzorzec Observer

363

Tworzc okno 


 zgosimy jego zainteresowanie danymi gwnego okna
programu.
- 
&"
.
 
 



 

!  
+


 

   



!&


& 
#&  

& 
//

!01&
$
2

& 
//

!01&
$
3

& 
/ /

!01&
$
0




!
4556
755

!
 



Okno prezentujce list wybranych dotd kolorw bdzie take peni rol obserwatora.
Reprezentujca je klasa pokazana jest poniej.
- 
#   
.
 
 



 

!  
+



 

   



'89
)%
1(%

8

 & !
 



Wybr jednego z kolorw za pomoc przycisku w gwnym oknie programu spowoduje


wywoanie metody  
 dla kadego zarejestrowanego obserwatora.
 

& &1:



*




*
 



*


 

 
$
&:!&.

 )
1;
.) 1

<8
=
% ) 1
 %

"

$
>
?
   !&



$
   

 ! 
 

:




W przypadku okna  spowoduje to zmian koloru wypeniajcego obszar


kontrolki typu 
, a okno 
 doda nazw wybranego koloru do swojej
listy. Dziaanie programu pokazano na rysunku 28.3.

Cz IV Wzorce czynnociowe

364
Rysunek 28.3.
Wybr koloru
w gwnym oknie
programu
prezentowany
jednoczenie
w formie
graficznej
i na licie. Efekt
zastosowania
wzorca Observer

Implementacja wzorca Observer


w jzyku Visual Basic .NET
Podobnie jak w poprzedniej wersji programu, zdefiniujemy najpierw oba interfejsy
wzorca Observer.
 

 


0@
 





 

 


  0@


  



Gwne okno programu rwnie bdzie zawiera trzy przyciski wyboru i reprezentowa podmiot zawiadamiajcy obserwatorw o zmianach. Aby uproci program, wszystkie trzy przyciski otrzymaj wspln metod obsugi zdarze.

*
 ,

 A
$
%
 A 
A

A
.2!&16
 ,

A
. !&16
 ,

A
.!&16
 ,

Metoda ta przesya obserwatorom acuch znakw opisujcy wybrany przycisk.




2A0@


6
0@


  

*




*
 

20
$
&?. 6
20

"

$
5
?
   !&

>

Rozdzia 28. Wzorzec Observer

365

*


 
$
&?.   6
  

 !  !?:

:




Klasa reprezentujca obserwatora dodajcego nazw koloru do listy jest praktycznie


taka sama jak w poprzedniej wersji programu.
 
&
 

,
 !<" !"

.
 

 

%0@
 

 

+0 !%

 
$
+

)&.

 !  +






 

0@
 

 !
.
 ! 

  ! ! 




&

Natomiast klasa reprezentujca obserwatora wypeniajcego swoje okno kolorem bdzie


nieco inna. Tekst prezentujcy nazw wybranego koloru pokaemy bezporednio w kodzie metody obsugi zdarzenia odrysowania, kolor ta zmienimy w kodzie metody
 
.
 
&
&"

,
 !<" !"

.
 

 




*


"

*
0 ,

0 ,



 

%0@
 

 

+0 !%

 !  +

&"
$
+

)&.


$
%
"//6
>B6
*%!"!0

 ,
$
%
0 ,&!01

A
!6
%
 A 
.,






 

0@
 

 !

.
@0  !  ! 


$
 


& 
 !?#%

& 
//

.!01&
$
!2

& 
/ /

.!01&
$
!0

& 
//

.!01&
$
!3









Cz IV Wzorce czynnociowe

366

 

.A0@


6
0@


  

*


3.,
$
!3.,

!*%6
6
 ,6
C56
D5




&

Inne rodzaje komunikatw


Zastanwmy si teraz, jakie rodzaje komunikatw moe wysya podmiot do obserwatorw? W naszym przykadowym programie rol komunikatu speniaa etykieta przycisku
zawierajca nazw koloru. Nie zawsze jednak obserwator bdzie oczekiwa komunikatu
w postaci acucha znakw. atwo te zauway, e w naszym przykadzie dokonujemy
dla komunikatu dwu prostych konwersji danych:
1. Pobieramy etykiet przycisku i wysyamy j jako cig znakw do obserwatora.
2. Obserwator  zamienia cig znakw na odpowiedni kolor.

W bardziej zoonych programach obserwatorzy mog wymaga rnych, czsto zoonych komunikatw. Kady z nich moe dokonywa wtedy niezbdnej konwersji, ale
w tym celu lepiej bdzie zastosowa wzorzec Adapter.
Innym problemem zwizanym z zastosowaniem wzorca Observer bdzie obserwacja
podmiotu, ktrego dane mog zmienia si w rny sposb. Na przykad pozycje listy
mog by dodawane lub usuwane, ale mog by te modyfikowane. W takim przypadku
musimy wysya do obserwatorw rne rodzaje komunikatw. Mona te wysya
nadal jeden rodzaj komunikatu, a w odpowiedzi obserwator zapyta o charakter zaistniaych zmian.
Rysunek 28.4.
Klasy
implementujce
interfejsy
obserwatora
i podmiotu
w przykadowym
programie
wykorzystujcym
wzorzec Observer

Konsekwencje stosowania
wzorca Observer
Wzorzec Observer wprowadza abstrakcyjne powizania z podmiotem. Podmiot nie zna
szczegw dziaania adnego z obserwatorw. Moe wic si okaza, e wobec wystpienia szeregu przyrostowych zmian danych podmiotu zostanie wysana do obserwatora

Rozdzia 28. Wzorzec Observer

367

seria powtarzajcych si komunikatw, ktrych obsuga wiza si bdzie ze zbyt duym


kosztem. Rozwizaniem problemu bdzie oczywicie wprowadzenie pewnej dodatkowej
logiki, tak by informacje o zmianach nie byy wysyane zbyt wczenie lub zbyt czsto.
Inny problem wystpuje w przypadku, gdy zmiana danych podmiotu dokonywana jest
przez pewne czci kodu lub systemu zwane dalej klientami. Pojawia si wtedy pytanie,
kto powinien inicjowa wysanie komunikatu o zmianach. Jeli odpowiedzialny bdzie
za to, jak dotychczas, sam podmiot, to w przypadku wykonywania zmian przez kilku
klientw znowu mog pojawi si serie komunikatw o nieznacznych w istocie zmianach.
Mona ich unikn, jeli to klient bdzie informowa podmiot, e naley wysa komunikat. Jeli jednak ktry z klientw zapomni o poinformowaniu podmiotu, to program
nie bdzie ju dziaa zgodnie z oczekiwaniami.
Stosujc wzorzec Observer mona take zdefiniowa kilka rodzajw komunikatw.
W tym celu interfejs obserwatora moe definiowa kilka rnych metod powiadomienia.
Dziki temu w pewnych sytuacjach obserwator bdzie mg ignorowa niektre z nich.

Zagadnienia do przemylenia
Wersja przykadowego programu, ktr napisalimy korzystajc z wersji 6 jzyka Visual
Basic rni si w dziaaniu od wersji napisanej w Visual Basic .NET tym, e zamknicie ktregokolwiek z okien obserwatorw nie powoduje zamknicia pozostaych okien
i zakoczenia pracy programu. W jaki sposb mona zastosowa dodatkowego obserwatora, aby uzyska efekt w postaci zakoczenia programu?

You might also like