Zakres Wzorce projektowe ( -Adapter (str , wykład wzorce projektowe część 1) - Composite (str , wykład wzorce projektowe część 1) - Flyweight (str. 9-12, wykład wzorce projektowe część 3)
2 Wzorce projektowe Umożliwienie współpracy obiektów o niezgodnych typach Tłumaczenie protokołów obiektowych
3 Adapter: struktura
4 Adapter: uczestnicy Target – definiuje interfejs specyficzny dla klienta Client – współpracuje z obiektami typu Target Adaptee – posiada interfejs wymagający adaptacji Adapter – adaptuje interfejs Adaptee do interfejsu Target
5 Adapter: konsekwencje Duża elastyczność – pojedynczy Adapter może współpracować z wieloma obiektami Adaptee naraz – Adapter może dodawać funkcjonalność do Adaptee Utrudnione pokrywanie metod Adaptera – konieczne utworzenie podklas obiektu Adaptee i bezpośrednie odwołania do nich Kompozycja i dziedziczenie jako mechanizmy adaptacji
6 Adapter: przykład //We have an old outlet that only accepts two-pronged plugs public interface UngroundedOutlet { public void TwoProngPlugin(); public void TwoProngUnplug(); } //And our new plug has three prongs public class GroundedPlug { public void ThreeProngPlugin(); public void ThreeProngUnplug(); }
7 public class GroundedAdapter implements UngroundedOutlet { GroundedPlug plug; public GroundedAdapter(GroundedPlug plug) { this.plug = plug; } public void TwoProngPlugIn() { plug.ThreeProngPlugin(); } public void TwoProngUnplug() { plug.ThreeProngUnplug(); }
8 Adapter: przykład (3) public class testPlug { public static void main(String[] args) { //create the three-prong plug Plug groundedPlug = new GroundedPlug(); //create the adapter UngroundedOutlet adapter = new GroundedAdapter(groundedPlug); //plug in the adapter to the outlet adapter.TwoProngPlugIn(); }
9 Composite: Cel Organizowanie obiektów w struktury drzewiaste reprezentujące relacje typu całość-część Jednolita obsługa pojednczych obiektów i złożonych struktur
10 Composite: struktura
11 Composite: Uczestnicy Component – deklaruje wspólny interfejs dla obiektów znajdujących się strukturze – implementuje wspólną funkcjonalność wszystkich obiektów Leaf – reprezentuje węzeł bez potomków Composite – reprezentuje węzeł z potomkami – przechowuje referencje do potomków – deleguje otrzymane polecenia do potomków
12 Composite: konsekwencje Elastyczna definicja struktur drzewiastych Proste dodawanie nowych komponentów Proste i spójne zarządzanie strukturą o dowolnej liczbie elementów
13 Flyweight: cel Współdzielenie obiektów w celu zwiększenia wydajności Wydzielenie z obiektu stanu wewnętrznego (współdzielonego) i zewnętrznego (specyficznego)
14 Flyweight: struktura
d/jw /jw designpatterns.html 15 Flyweight: struktura
Ciekawy przykład ( attern/flyweight.html ) 16 Flyweight: struktura
17 Flyweight: uczestnicy Flyweight – podlega współdzieleniu między klientów – definiuje interfejs do przyjmowania i odtwarzania stanu zewnętrznego obiektu Concrete Flyweight – przechowuje stan wewnętrzny (współdzielony) – jest niezależny od kontekstu (z wyjątkiem stanu zewnętrznego) Flyweight Factory – tworzy i przechowuje obiekty Flyweight Client – otrzymuje obiekty Flyweight za pośrednictwem Flyweight Factory
18 Flyweight: konsekwencje Zmniejszenie wymagań pamięciowych programu – zmniejszenie ogólnej liczby obiektów – zmniejszenie rozmiaru stanu obiektów – stan zewnętrzny może być przechowywany lub wyliczany Wzrost złożoności obliczeniowej – dodatkowy nakład na zarządzanie stanem zewnętrznym