180 likes | 289 Views
Zakres. Wzorce projektowe (http://wazniak.mimuw.edu.pl/index.php?title=Zaawansowane_projektowanie_obiektowe) Adapter (str. 25-28, wykład wzorce projektowe część 1) - Composite (str. 29-32, wykład wzorce projektowe część 1) - Flyweight (str. 9-12, wykład wzorce projektowe część 3).
E N D
Zakres • Wzorce projektowe (http://wazniak.mimuw.edu.pl/index.php?title=Zaawansowane_projektowanie_obiektowe) • Adapter (str. 25-28, wykład wzorce projektowe część 1) - Composite (str. 29-32, wykład wzorce projektowe część 1) - Flyweight (str. 9-12, wykład wzorce projektowe część 3)
Wzorce projektowe • Umożliwienie współpracy obiektów o niezgodnych typach • Tłumaczenie protokołów obiektowych
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
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
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(); }
public class GroundedAdapter implements UngroundedOutlet { GroundedPlug plug; public GroundedAdapter(GroundedPlug plug) { this.plug = plug; } public void TwoProngPlugIn() { plug.ThreeProngPlugin(); } public void TwoProngUnplug() { plug.ThreeProngUnplug(); } }
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 = newGroundedAdapter(groundedPlug); //plug in the adapter to the outlet adapter.TwoProngPlugIn(); } }
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
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
Composite: konsekwencje • Elastyczna definicja struktur drzewiastych • Proste dodawanie nowych komponentów • Proste i spójne zarządzanie strukturą o dowolnej liczbie elementów
Flyweight: cel • Współdzielenie obiektów w celu zwiększenia wydajności • Wydzielenie z obiektu stanu wewnętrznego (współdzielonego) i zewnętrznego (specyficznego)
Flyweight: struktura http://www.javaworld.com/javaworld/jw-07-2003/jw-0725-designpatterns.html
Flyweight: struktura Ciekawy przykład (http://www.javacamp.org/designPattern/flyweight.html )
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
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