model Adapter în java

Ne întoarcem la modelele de proiectare structurale. De data aceasta ne uităm la un model de design numit adaptor (de asemenea, numit Wrapper împreună cu model de fațadă).

Acest articol va vorbi despre următoarele:

Deci, modelul adaptor este folosit pentru obiecte cu o interfață unică (contract) poate lucra ori de câte ori are nevoie de un obiect cu o interfață complet diferit. Există două tipuri de adaptor - Adaptor de clasă și adaptorul de obiect.

În primul rând, ne uităm la fiecare dintre aceste tipuri, iar apoi voi explica diferența dintre cele două wrapper'ami - adaptor și fațadă.

Adaptor obiect

Adaptor Obiectul atinge ținta cu o compoziție. În diagrama de mai jos, clientul este necesară pentru a utiliza interfata TargetInterface. Acest lucru creează clasa ObjectAdapter care implementeaza interfata TargetInterface, și stochează clasa de obiect Adaptee. Atunci când metoda de asteptare targetMethod adaptorul, apelează metoda corespunzătoare într-o interfață de adaptare.

În cel mai simplu caz, ObjectAdapter de punere în aplicare va fi:

În plus, această abordare este că suntem separați complet interfața client al interfeței adaptabile.

Adaptor Clasa

În cazul în care clasa Adapter'om pentru a atinge obiectivul nostru de a folosi moștenire multiplă. ClassAdapter moștenite de la interfața client și de capacitatea de adaptare a interfeței. Deoarece Java nu are nici o moștenire multiplă, acesta este doar unul dintre strămoșii pot fi de clasă abstractă / beton. Al doilea va fi strămoșul al interfeței, care nu este întotdeauna convenabil.

Și aici este o clasă de implementare ClassAdapter trivială:

Vreau să vă atrag atenția că tehnicile de conflictul sigratur pot apărea la astfel de adaptor de punere în aplicare. Astfel de probleme nu au nici un adaptor de obiect.

Adaptorul de clasă este considerată o soluție simplă în cazul în care nu este necesară o separare strictă a clientului și interfețele adaptabile.

Diferența dintre adaptor și fațadă

Acum, vreau să spun câteva cuvinte despre modelul de fațadă, care ca adaptorul este Wrapper'om. Fatade definește o nouă interfață, în timp ce adaptorul utilizează interfețele existente.

Nu este necesar să se compare fațadă și adaptorul spune ca, de fațadă se poate încheia cu câteva clase, dar numai un singur adaptor se adaptează. Acesta poate fi bine că adaptorul va trebui să se adapteze numărul de clase, și vice-versa, trebuie să utilizați fațada pentru a simplifica doar o singură clasă complexă. Deci, diferența dintre aceste două modele, nu numărul de entități de lichidare, ci mai degrabă pentru ceea ce fac.

Un exemplu de utilizare adaptoare în JDK

Biblioteca standard, de asemenea, pot găsi exemple de utilizare a unui adaptor. Probabil cel mai popular caz de utilizare - l java.io.InputStreamReader și OutputStreamWriter.

InputStreamReader constructor preia de intrare InputStream și adaptează fluxul rezultat în Reader.