Adapter (wrapper)

Návrhové vzory Adapter (wrapper)

Návrhový vzor Adapter (nebo také Wrapper) se používá při práci s komponentou, která má nestabilní nebo s naší aplikací nekompatibilní rozhraní. Umožňuje komponentu obalit naším rozhraním a tak aplikaci úplně odstínit od rozhraní původního.

Motivace

Většina z vás jistě při vývoji používá komponentovou architekturu a využívá tedy hotových řešení třetích stran (nebo vlastních komponent z předešlých projektů). Představme si, že chceme (nebo dokonce musíme) používat komponentu, které její autoři stále mění rozhraní. My tuto komponentu používáme na 100 místech v programu a při každé nové verzi musíme kód na mnoha místech přepisovat. Podobný problém nastane v případě, když máme v aplikaci již připravené nějaké rozhraní a chceme do něj komponentu zasadit. Ta jednoduše řečeno nepasuje.

Vzor Adapter nám komponentu obalí naším rozhraním, aplikace je tedy úplně odstíněna od původního rozhraní komponenty. Kdykoli se toto rozhraní změní, stačí aktualizovat pouze Adapter. Díky Adapteru můžeme řešit dokonce i případ, kdy se nám komponenta přestane líbit a vyměníme ji za jinou. Tehdy opět pouze opravíme Adapter a program se zevnitř vůbec nezmění.

Vzor

Vzor je tedy jakýsi prostředník (spojovník) mezi naším rozhraním a rozhraním komponenty, které je pro aplikaci neznámé. Tohoto propojení můžeme dosáhnout na úrovni objektu nebo na úrovni třídy. Vzor má tedy 2 varianty.

Object adapter

Jednoduchý návrhový vzor object adapter/wrapper

Klient je součást našeho systému, která volá naše rozhraní. Adaptee je ona komponenta, jejíž rozhraní je nestabilní, nekompatibilní nebo zkrátka nechceme, aby na něm naše aplikace byla závislá. Naše rozhraní je definováno v třídě Adapter, která zajišťuje transformaci metod od Klienta do Adaptee. Adapter může být pouze spojovník a volat jen jinak pojmenovouvanou metodu. Nebo může obsahovat jednoduchou logiku. Jako příklad si můžeme představit, že voláme metodu Vloz(tabulka, pole), která se přeloží jako DatabazovyDotaz('IN­SERT INTO tabulka VALUES hodnota1, hodnota2...'). Pole se transformovalo na prarametr a ten je předán Adaptee.

Vidíme, že Klient a Adaptee jsou propojeny pomocí objektu Adapter.

Možná modifikace

Vzor můžeme vylepšit přidáním abstraktní třídy Cil.

Návrhový vzor object adapter/wrapper

Adapter dědí z abstraktní třídy Cil. Smysl abstraktní třídy je ten, abychom mohli Adapter snáze vyměnit za jiný a byli si jisti, že jsme zachovali kompatibilitu. Stejně tak může být Cil jen interface.

Class Adapter

Jednoduchý návrhový vzor class adapter/wrapper

Class adapter je méně používaná varianta a to proto, že spoléhá na skutečnost, že třídu Adaptee lze dědit. Výsledný adapter je třída zděděná z Cil a Adapter. Cil bude samozřejmě interface, aby byla vícenásobná dědičnost možná. Také ztrácíme možnost pracovat zároveň s dědici Adaptee, což by u Object adapteru fungovalo (protože dědic poskytuje stejné rozhraní, jako předek). Výhodou však je, že můžeme přepsat některé metody Adaptee.

Závěrem

Wrappery se často staví okolo databází (lze poté vyměnit databázi bez jediné změny v naší aplikaci) nebo okolo webových služeb, které mají často složitá API.


 

  Aktivity (1)

Článek pro vás napsal David Čápka
Avatar
Autor pracuje jako softwarový architekt a pedagog na projektu ITnetwork.cz (a jeho zahraničních verzích). Velmi si váží svobody podnikání v naší zemi a věří, že když se člověk neštítí práce, tak dokáže úplně cokoli.
Unicorn College Autor se informační technologie naučil na Unicorn College - prestižní soukromé vysoké škole IT a ekonomie.

Jak se ti líbí článek?
Celkem (12 hlasů) :
4.754.754.754.754.75


 


Miniatura
Předchozí článek
Singleton (jedináček)
Miniatura
Všechny články v sekci
Návrhové vzory
Miniatura
Následující článek
Facade (fasáda)

 

 

Komentáře

Avatar
Milan Gallas
Redaktor
Avatar
Milan Gallas:

Tento návrhový vzor může nabývat dalších podob. Implementují ho návrhové vzory proxy a decorator. V případě návrhového vzoru decorator obalíme třídu a přidáme jí další funkčnost. U návrhového vzoru proxy obalíme třídu a přidáme k ní nějaká omezení.

Editováno 29.4.2014 21:31
 
Odpovědět 29.4.2014 21:31
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 1 zpráv z 1.