Wzorce
projektowe,
część II
Przegląd zagadnień
Adapter
Fasada
Obserwator
Podsumowanie
Pytania sprawdzające
Laboratorium
Adapter (1)
Adapter należy do wzorców
strukturalnych.
Zadaniem wzorca jest przetworzenie
interfejsu klasy w inny interfejs,
którego oczekuje Klient
Adapter umożliwia współpracę klasom
o niekompatybilnych interfejsach
Adapter (2)
interface IstniejacyInterfejs {
void Metoda();
}
class Adaptacja {
public void ObcaMetoda() {
Console.WriteLine("Obca metoda zaadaptowana");
}}
class Adaptor : IstniejacyInterfejs {
public void Metoda() {
ad.ObcaMetoda();
}
private Adaptacja ad = new Adaptacja();
}
class Klient {
public void MetodaKlienta(IstniejacyInterfejs e1) {
e1.Metoda();
}}
class Glowna {
public static void Main() {
Klient gc = new Klient();
IstniejacyInterfejs e1 = new Adaptor();
gc.MetodaKlienta(e1);
}}
Fasada
Jest on pomyślany jako środek dostępu
do złożonego systemu prezentujący na
zewnątrz uproszczony lub
uporządkowany interfejs
programistyczny.
Wzorzec ten definiuje interfejs
wyższego poziomu, sprawiający, że
łatwiej jest używać podsystemów.
Fasada (2)
Dobrym przykładem zastosowania Fasady
jest aplikacja bankomatowa – od strony
urządzenia (bankomat) mamy
ograniczony dostęp do systemu
bankowego, obsługiwany przez
odpowiednie metody
Model Fasady jest dwuczęściowy
interfejs zewnętrzny, który wie, który z
podsystemów odpowiada za konkretne
zadanie i wyśle we właściwe miejsce żądanie
wykonania
podsystemy, przejmujące jedynie zadanie
zlecone przez interfejs zewnętrzny
Obserwator (1)
Wzorzec obserwatora służy do
powiadamiania wielu obiektów
(obserwatorów) o zmianie w obiekcie –
przedmiocie obserwacji
interface Obserwator
{
void Informuj();
}
class Szpieg : Obserwator
{
public void Informuj()
{
Console.WriteLine("Wykrylem zmiane!");
}
}
interface Obserwowalny
{
void Dodaj(Obserwator o);
}
<<interface>
>
Obserwator
+ Informuj()
Szpieg
+ Informuj()
<<interface>
>
Obserwowaln
y
+
Dodaj(Obse
rwator)
class Przedmiot : Obserwowalny
{
private ArrayList ListaObs;
public Przedmiot()
{
ListaObs = new ArrayList();
}
public void Dodaj(Obserwator o)
{
ListaObs.Add(o);
}
public void Powiadom()
{
foreach (Obserwator o in ListaObs)
o.Informuj();
}
private int d;
public int dane
{
get { return d; }
set { d = value; Powiadom(); }
}
}
Obserwator (2)
<<interface
>>
Obserwator
+ Informuj()
Szpieg
+ Informuj()
<<interface>
>
Obserwowaln
y
+
Dodaj(Obser
wator)
Przedmiot
Podsumowanie
Ekspresowy przegląd wzorców
projektowych nie wyczerpuje
wszystkich możliwości – jest to jedynie
wstęp do bardzo ważnego zagadnienia
inżynierii oprogramowania
Omówione wzorce Adaptera i Fasady
pokazują, jak z małych części tworzyć
skomplikowane elementy, natomiast
na bazie Obserwatora można zapoznać
się z intuicją wzorca czynnościowego
Pytania sprawdzające
Omów wzorzec Obserwatora.
W jaki sposób wzorzec Adaptera może
dostosować interfejs dla klasy Klienta?
Laboratorium