250 likes | 386 Views
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.
E N D
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
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
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.
Factory Method: cel • Zdefiniować interfejs do tworzenia obiektu; podklasy decydują, której klasy instancję utworzyć. F.M. poleca klasie przekazać tworzenie instancji do podklasy
Factory Method: wykorzystanie • Wykorzystujemy gdy: - klasa nie może określić, które obiekty mają być utworzone
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
Factory Method: przykład2 (2) • Klasa MazeGame z metodą createMaze()
Factory Method: przykład2 (4) • Dodajemy metody (factory methods)
Factory Method: przykład2 (6) • createMaze() – bardziej złożony, ale elastyczny • Klasa EnchantedMazeGame • Metoda createMaze() z MazeGame jest dziedziczona
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
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
Abstract Factory: przykład • Narzędzie tworzenia GUI z wieloma look-and-feels
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
Abstract Factory: zastosowanie • Zastosowanie do MazeGame – MazeFactory kolekcja factory methods (równocześnie Abstractfactory i Concretefactory)
Abstract Factory: zastosowanie (1) • Metoda createMaze() z klasy MazeGame ma jako parametr MazeFactory
Abstract Factory: zastosowanie (2) • createMaze() deleguje odpowiedzialnośc za tworzenie obiektu labirynt do obiektu MazeFactory
Abstract Factory: zastosowanie (3) • Łatwo rozszerzyć MazeFactory do tworzenia innych
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
Abstract Factory: implementacja • Aplikacje typowo wykorzystują jedną instancję konkretnej fabryki • Wykorzystać w tym celu wzór Singleton