Programování

Práce s návrhovým vzorem adaptéru

Návrhové vzory jsou řešením opakujících se problémů a složitostí v softwarovém designu. Návrhové vzory jsou kategorizovány jako kreační, strukturální nebo behaviorální. Kreační vzory se používají k vytvoření a správě mechanismu vytváření instancí tříd. Strukturální vzory se používají k realizaci vztahů mezi entitami. Vzorce chování se zabývají spoluprací na objektech a delegováním odpovědností.

Vzor adaptéru je strukturální návrhový vzor, ​​který funguje jako most mezi dvěma nekompatibilními rozhraními. Termín „adaptér“ se používá k představení objektu, který umožňuje komunikaci a spolupráci dvou vzájemně nekompatibilních rozhraní. V podstatě vzor adaptéru umožňuje třídám (které mají nekompatibilní rozhraní) pracovat společně a jejich objekty v případě potřeby komunikovat.

Existují určité typy adaptérů, které implementují rozhraní Targetu i Adaptee. Takové typy adaptérů jsou známé jako obousměrné adaptéry. Máte také dva odlišné typy adaptérů, jmenovitě adaptéry tříd a adaptéry objektů. Zatímco první používá dědičnost, druhý používá složení k opravě problémů s nekompatibilitou ve vašich návrzích. Návrhový vzor adaptéru můžete použít, když potřebujete použít knihovnu jiného výrobce, která není kompatibilní s typy, které máte v aplikaci.

Následuje seznam typů, které se účastní typické implementace vzoru adaptéru:

  • cílová
  • Adaptér
  • Příjemce
  • Klient

Pochopme to na příkladu. Předpokládejme, že dva lidé, kteří mluví a rozumějí různými jazyky, musí komunikovat - jedním může být francouzština a druhým němčina. Tyto dvě osoby tedy mohou mluvit a rozumět pouze francouzštině a němčině - ne oběma. Pro usnadnění komunikace byste obvykle potřebovali někoho (tlumočníka), který zná oba tyto jazyky. Osoba, která může tuto komunikaci usnadnit, tedy funguje jako adaptér.

Tento vzor spadá do kategorie struktur, protože byste tento vzor použili ke strukturování typů v naší aplikaci - tento vzor obvykle může transformovat jedno rozhraní na jiné. Gang of Four definuje vzor adaptéru jako „Převést rozhraní třídy na jiné rozhraní, které klienti očekávají. Adaptér umožňuje třídám spolupracovat, což by jinak kvůli nekompatibilním rozhraním nemohlo fungovat.“

Pojďme nyní kopat do nějakého kódu. Zvažte následující dvě třídy.

veřejná třída TargetA

            {

public void DisplayA ()

                {

Console.WriteLine ("TargetA");

                }

            }

veřejná třída TargetB

            {

public void DisplayB ()

                {

Console.WriteLine ("TargetB");

                }

            }

Jak vidíte, tyto dvě třídy jsou nekompatibilní - nemají ani společnou základnu. Následující výpis kódu ukazuje, jak vypadají třídy adaptérů.

veřejné rozhraní ITargetAdapter

            {

void ProcessData ();

            }

public class AdapterA: ITargetAdapter

            {

public TargetA targetA {get; soubor; }

public void Process ()

                 {

targetA.DisplayA ();

                 }

public AdapterA (TargetA obj)

                 {

targetA = obj;

                 }

            }

public class AdapterB: ITargetAdapter

            {

public TargetB targetB {get; soubor; }

public void Process () {targetB.DisplayB (); }

public AdapterB (TargetB obj)

                 {

targetB = obj;

                 }

            }

Všimněte si, že obě třídy adaptérů mají jedno společné rozhraní s názvem ITargetAdapter, které tyto třídy implementují. Každá ze dvou tříd adaptérů má konstruktor argumentů, který přijímá odkaz na objekt příslušných cílových tříd. Rozhraní ITargetAdapter obsahuje deklaraci metody Process (). Tato metoda je implementována oběma třídami adaptérů - tyto metody vyvolávají Display () a příslušné metody zobrazení cílových tříd, které jsme implementovali dříve.

Následující výpis kódu ukazuje, jak můžete tyto třídy adaptérů používat.

třídní program

    {

static void Main (řetězec [] args)

        {

Adaptér ITargetAdapter = nový adaptérA (nový TargetA ());

adaptér.Proces ();

adaptér = nový adaptér B (nový TargetB ());

adaptér.Proces ();

Console.Read ();

        }

Jak vidíte ve výše uvedeném fragmentu kódu, musíme předat instanci příslušné cílové třídy konstruktoru třídy adaptéru.

Ve svých připravovaných příspěvcích zde představím diskuse o dalších designových vzorech. Návrhový vzor adaptéru může být dobrou volbou, pokud budete muset ve svých aplikacích vyvolat starší kód. Další informace o návrhovém vzoru adaptéru se dozvíte z tohoto článku.

$config[zx-auto] not found$config[zx-overlay] not found