I. Wzorce kreacyjne
1. Singleton
2. Budowniczy
3. Prototyp
4. Fabryka
5. Fabryka abstrakcyjna
II. Wzorce strukturalne
1. Adapter
2. Most
3. Kompozyt
4. Dekorator
5. Fasada
6. Pyłek
7. Pełnomocnik
III. Wzorce czynnościowe
1. Łańcuch zobowiązań
2. Polecenie
3. Interpreter
4. Iterator
5. Mediator
6. Pamiątka
7. Obserwator
8. Stan
9. Strategia
10. Metoda szablonowa
11. Odwiedzający

Adapter - wzorzec projektowy (design pattern) - java

1. Cel:
Wzorzec projektowy adapter jest używany do konwersji interfejsu jednej klasy na inny interfejs oczekiwany przez system.
Objekt adapter łączy inne obiekty bez względu na kompatybilość interface-ów.

2. Problem:
Opisuje to przypadek gdy dwa obiekty nie współpracują razem.
Jest to przykład starego kodu (legacy code) z nowym kodem, gdy mamy niekompatybilne interface-y

3. Rozwiązanie:
Dwa te niepowiązane obiekty łączone są jeden obiekt zwany adapter.
Przykład możemy dać gniazdka słuchawek do telefonu google i iphone,
potrzebujemy przejściówki (adaptera)
Inna nazwa to Wrapper, bo opakowujemy klasę
Możemy podzielić na dwa rozwiązania
a) przez kompozycję - w interface-ie używamy innego obiektu do którgo się odwołujemy
b) przez dziedziczenie - używamy starej metody w nowym interface-ie

4. Diagram klas wzorca Adapter:
a) przez kompozycję (object scope)

b) przez dziedziczenie (class scope)


5. Implementacja:
a) przez kompozycję (object scope)

  1. public class Adoptowana {
  2.    public Adoptowana() {}
  3.    public String stareZadanie() {return "stareZadanie";}
  4. }
  5.  
  6. public class Adapterkompozycja implements WymaganyInterface {
  7.    private Adoptowana adoptowana;
  8.    public Adapter() {
  9.       adoptowana = new Adoptowana();
  10.    }
  11.    public String noweZadanie {
  12.       return adoptowana.stareZadanie();
  13.    }
  14. }
  15.  
  16. public interface WymaganyInterface {
  17.    String noweZadanie();
  18. }

b) przez dziedziczenie (class scope)
  1. public class Adoptowana {
  2.         public Adoptowana() {}
  3.         public String stareZadanie() {return "stareZadanie";}
  4. }
  5. public class AdapterDziedziczenie extends Adoptowana implements WymaganyInterface {
  6.         public Adapter() {}
  7.         public String noweZadanie {
  8.                 return super.stareZadanie();
  9. }
  10. }
  11. public interface WymaganyInterface {
  12.         String noweZadanie();
  13. }
  14.  

6. Zastosowanie w kodzie java:
- java.util.Arrays#asList()
- java.util.Collections#list()
- java.util.Collections#enumeration()
- java.io.InputStreamReader(InputStream) (zwraca Reader)
- java.io.OutputStreamWriter(OutputStream) (zwraca Writer)
- javax.xml.bind.annotation.adapters.XmlAdapter#marshal() i #unmarshal()
created by cv.java.org.pl © 2023 All Rights Reserved.