Zakres i zasięg deklaracji Zakres : obszar programu, w którym identyfikator może być użyty
Zakres
description
Transcript of Zakres
![Page 1: Zakres](https://reader035.fdocuments.pl/reader035/viewer/2022070418/56815946550346895dc6816f/html5/thumbnails/1.jpg)
Zakres
• Wzorce projektowe - kreacyjne- Factory Method - Abstract Factory
![Page 2: Zakres](https://reader035.fdocuments.pl/reader035/viewer/2022070418/56815946550346895dc6816f/html5/thumbnails/2.jpg)
2
Wzorce kreacyjne
Wzorce kreacyjne abstrahują proces tworzenia instancji obiektu. Ukrywają informacje o tym jak obiekt jest tworzony; w efekcie pomagaja uniezależnić system od tego jak obiekty są tworzone i komponowane
![Page 3: Zakres](https://reader035.fdocuments.pl/reader035/viewer/2022070418/56815946550346895dc6816f/html5/thumbnails/3.jpg)
3
Wzorce Factory
• Wzorce kreacyjne klas – wykorzystują dziedziczenie do tworzenia instancji – Factory Method
• Wzorce kreacyjne obiektów skupiają się na delegowaniu tworzenia instancji do innego obiektu – Abstract Factory
![Page 4: Zakres](https://reader035.fdocuments.pl/reader035/viewer/2022070418/56815946550346895dc6816f/html5/thumbnails/4.jpg)
4
Wzorce Factory
Idiom dla tworzenia obiektu – w j. Java operator new
Wzorce kreacyjne tworzą nowe obiekty nie używając jawnie new. Można pisać metody tworzące instancje różnych obiektów, które można rozszerzyć do tworzenia instancji nowo-tworzonych obiektów bez zmiany kodu.
![Page 5: Zakres](https://reader035.fdocuments.pl/reader035/viewer/2022070418/56815946550346895dc6816f/html5/thumbnails/5.jpg)
5
Factory Method: cel• Zdefiniować interfejs do tworzenia obiektu;
podklasy decydują, której klasy instancję utworzyć. F.M. poleca klasie przekazać tworzenie instancji do podklasy
![Page 6: Zakres](https://reader035.fdocuments.pl/reader035/viewer/2022070418/56815946550346895dc6816f/html5/thumbnails/6.jpg)
6
Factory Method: wykorzystanie
• Wykorzystujemy gdy:
- klasa nie może określić, które obiekty mają być utworzone
![Page 7: Zakres](https://reader035.fdocuments.pl/reader035/viewer/2022070418/56815946550346895dc6816f/html5/thumbnails/7.jpg)
7
Factory method: uczestnicy
• Product – definiuje interfejs typu obiektów tworzonych za pomocą FactoryMethod
• ConcretProduct implementuje interfejs produktu
• Creator deklaruje FactoryMethod, która zwraca obiekt typu Product
• ConcretCreator nadpisuje FactoryMethod, aby zwrócić instancję ConcretProduct
![Page 8: Zakres](https://reader035.fdocuments.pl/reader035/viewer/2022070418/56815946550346895dc6816f/html5/thumbnails/8.jpg)
8
Factory Method: przykład1
![Page 9: Zakres](https://reader035.fdocuments.pl/reader035/viewer/2022070418/56815946550346895dc6816f/html5/thumbnails/9.jpg)
9
Factory Method: przykład2
![Page 10: Zakres](https://reader035.fdocuments.pl/reader035/viewer/2022070418/56815946550346895dc6816f/html5/thumbnails/10.jpg)
10
Factory Method: przykład2 (2)
• Klasa MazeGame z metodą createMaze()
![Page 11: Zakres](https://reader035.fdocuments.pl/reader035/viewer/2022070418/56815946550346895dc6816f/html5/thumbnails/11.jpg)
11
Factory Method: przykład2 (3)
![Page 12: Zakres](https://reader035.fdocuments.pl/reader035/viewer/2022070418/56815946550346895dc6816f/html5/thumbnails/12.jpg)
12
Factory Method: przykład2 (4)
• Dodajemy metody (factory methods)
![Page 13: Zakres](https://reader035.fdocuments.pl/reader035/viewer/2022070418/56815946550346895dc6816f/html5/thumbnails/13.jpg)
13
Factory Method: przykład2 (5)
![Page 14: Zakres](https://reader035.fdocuments.pl/reader035/viewer/2022070418/56815946550346895dc6816f/html5/thumbnails/14.jpg)
14
Factory Method: przykład2 (6)
• createMaze() – bardziej złożony, ale elastyczny• Klasa EnchantedMazeGame• Metoda createMaze() z MazeGame jest dziedziczona
![Page 15: Zakres](https://reader035.fdocuments.pl/reader035/viewer/2022070418/56815946550346895dc6816f/html5/thumbnails/15.jpg)
15
Factory Method: przykład2 (7)
• Metoda createMaze() z Mazegame przekazuje tworzenie obiektu maze do podklas (działanie wzorca F.M.)
• Korelacje: Creator => MazeGame ConcreteCreator => EnchantedMazeGame
(MazeGame jest też ConcreteCreator) Product => MapSite ConcreteProduct => Wall, Room, Door,
EnchantedWall,• EnchantedRoom, EnchantedDoor
![Page 16: Zakres](https://reader035.fdocuments.pl/reader035/viewer/2022070418/56815946550346895dc6816f/html5/thumbnails/16.jpg)
16
Abstract Factory: cel
• Dostarczyć interfejs dla utworzenia rodziny powiązanych lub zależnych obiektów bez specyfikowania ich konkretnych klas
• Klasa deleguje odpowiedzialność tworzenia instancji obiektu do innego obiektu (przez kompozycję), a F.M. wykorzystuje dziedziczenie
• Delegowany obiekt często wykorzystuje F.M. do tworzenia instancji
![Page 17: Zakres](https://reader035.fdocuments.pl/reader035/viewer/2022070418/56815946550346895dc6816f/html5/thumbnails/17.jpg)
17
Abstract Factory: przykład• Narzędzie tworzenia GUI z wieloma look-and-feels
![Page 18: Zakres](https://reader035.fdocuments.pl/reader035/viewer/2022070418/56815946550346895dc6816f/html5/thumbnails/18.jpg)
18
Abstract Factory: zastosowanie
• System powinien być niezależny od tego jak są tworzone, komponowane i reprezentowane jego produkty
• System musi wykorzystać jedną ze zbioru rodziny produktów
• Rodzina powiązanych produktów produktów jest utworzona do wspólnego wykorzystania
![Page 19: Zakres](https://reader035.fdocuments.pl/reader035/viewer/2022070418/56815946550346895dc6816f/html5/thumbnails/19.jpg)
19
Abstract Factory: struktura
![Page 20: Zakres](https://reader035.fdocuments.pl/reader035/viewer/2022070418/56815946550346895dc6816f/html5/thumbnails/20.jpg)
20
Abstract Factory: zastosowanie
• Zastosowanie do MazeGame – MazeFactory kolekcja factory methods (równocześnie Abstractfactory i Concretefactory)
![Page 21: Zakres](https://reader035.fdocuments.pl/reader035/viewer/2022070418/56815946550346895dc6816f/html5/thumbnails/21.jpg)
21
Abstract Factory: zastosowanie (1)
• Metoda createMaze() z klasy MazeGame ma jako parametr MazeFactory
![Page 22: Zakres](https://reader035.fdocuments.pl/reader035/viewer/2022070418/56815946550346895dc6816f/html5/thumbnails/22.jpg)
22
Abstract Factory: zastosowanie (2)
• createMaze() deleguje odpowiedzialnośc za tworzenie obiektu labirynt do obiektu MazeFactory
![Page 23: Zakres](https://reader035.fdocuments.pl/reader035/viewer/2022070418/56815946550346895dc6816f/html5/thumbnails/23.jpg)
23
Abstract Factory: zastosowanie (3)
• Łatwo rozszerzyć MazeFactory do tworzenia innych
![Page 24: Zakres](https://reader035.fdocuments.pl/reader035/viewer/2022070418/56815946550346895dc6816f/html5/thumbnails/24.jpg)
24
Abstract Factory: konsekwencje
• Izoluje klientów od implementacji konkretnych klas
• Łatwa wymiana rodziny produktów, ponieważ poszczególna konkretna fabryka może wspomagać rodzinę produktów
• Wspomaga wykorzystanie produktów z jednej rodziny
• - nowy rodzaj produktu wymaga zmiany interfejsu Abstractfactory
![Page 25: Zakres](https://reader035.fdocuments.pl/reader035/viewer/2022070418/56815946550346895dc6816f/html5/thumbnails/25.jpg)
25
Abstract Factory: implementacja
• Aplikacje typowo wykorzystują jedną instancję konkretnej fabryki
• Wykorzystać w tym celu wzór Singleton