poniedziałek, 3 marca 2014

Adapter (klasowy oraz obiektowy)

Adapter (Wrapper)

Problem:

Mamy dwie klasy o niekompatybilnych interfejsach i chcemy przekształcić jeden interfejs w drugi (inny), bądź nowy.

Zadania: 
  • celem jest umożliwienie współpracy dwóm klasom o niekompatybilnych interfejsach. 
  • przekształca interfejs jednej z klas na interfejs drugiej klasy 
  • innym zadaniem adaptera jest opakowanie istniejącego interfejsu w nowy.
Przykład: 

Jako przykład chciałbym przedstawić następujący kod. Mamy klasę Stack oraz List. Zamierzenie jest takie, aby za pomocą metod z klasy Stack wywoływać metody z klasy List, aby stworzyć prosty adapter.. W tym celu należy stworzyć nową klasę ListImpStack, która będzie dziedziczyć po List oraz implementować Stack. Następnie w definicjach metod klasy Stack wywoływane są metody z klasy List.
interface Stack
{
    void push (T o) { ... }
    T pop () { ... }
    T top () { ... }
} 


/*klasa adaptowana*/
class List
{
    public void insert (DNode pos, T o) { ... }
    public void remove (DNode pos) { ... }
 
    public void insertHead (T o) { ... }
    public void insertTail (T o) { ... }
 
    public T removeHead () { ... }
    public T removeTail () { ... }
 
    public T getHead () { ... }
    public T getTail () { ... }
} 


/*Klasa ListImpStack adaptuje klasę List opakowując ją w interfejs klasy Stack*/
class ListImpStack extends List implements Stack
{
    public void push (T o) {
        insertTail (o);
    } 
    public T pop () {
        return removeTail ();
    } 
    public T top () {
        return getTail ();
    }
}

Brak komentarzy:

Prześlij komentarz