Zakres

25
Zakres • Wzorce projektowe - kreacyjne - Factory Method - Abstract Factory

description

Zakres. Wzorce projektowe - kreacyjne Factory Method Abstract Factory. 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. - PowerPoint PPT Presentation

Transcript of Zakres

Page 1: Zakres

Zakres

• Wzorce projektowe - kreacyjne- Factory Method - Abstract Factory

Page 2: Zakres

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

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

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

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

6

Factory Method: wykorzystanie

• Wykorzystujemy gdy:

- klasa nie może określić, które obiekty mają być utworzone

Page 7: Zakres

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

8

Factory Method: przykład1

Page 9: Zakres

9

Factory Method: przykład2

Page 10: Zakres

10

Factory Method: przykład2 (2)

• Klasa MazeGame z metodą createMaze()

Page 11: Zakres

11

Factory Method: przykład2 (3)

Page 12: Zakres

12

Factory Method: przykład2 (4)

• Dodajemy metody (factory methods)

Page 13: Zakres

13

Factory Method: przykład2 (5)

Page 14: Zakres

14

Factory Method: przykład2 (6)

• createMaze() – bardziej złożony, ale elastyczny• Klasa EnchantedMazeGame• Metoda createMaze() z MazeGame jest dziedziczona

Page 15: Zakres

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

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

17

Abstract Factory: przykład• Narzędzie tworzenia GUI z wieloma look-and-feels

Page 18: Zakres

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

19

Abstract Factory: struktura

Page 20: Zakres

20

Abstract Factory: zastosowanie

• Zastosowanie do MazeGame – MazeFactory kolekcja factory methods (równocześnie Abstractfactory i Concretefactory)

Page 21: Zakres

21

Abstract Factory: zastosowanie (1)

• Metoda createMaze() z klasy MazeGame ma jako parametr MazeFactory

Page 22: Zakres

22

Abstract Factory: zastosowanie (2)

• createMaze() deleguje odpowiedzialnośc za tworzenie obiektu labirynt do obiektu MazeFactory

Page 23: Zakres

23

Abstract Factory: zastosowanie (3)

• Łatwo rozszerzyć MazeFactory do tworzenia innych

Page 24: Zakres

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

25

Abstract Factory: implementacja

• Aplikacje typowo wykorzystują jedną instancję konkretnej fabryki

• Wykorzystać w tym celu wzór Singleton