Datový vzor soukromé třídy - Private class data pattern

Data soukromé třídy je návrhový vzor v programování slouží k zapouzdření atributů třídy a jejich manipulace.

Standardní dokumentace

Následující kategorie dokumentace pro data soukromé třídy návrhový vzor se řídí precedensem stylu dokumentace dokumentace vzorů nastaveným vzorem Gang čtyř.

Název a klasifikace

Název vzoru
Tento vzor je znám jako data soukromé třídy návrhový vzor.
Klasifikace vzoru
Tento vzor je a strukturální vzor.

Úmysl

The data soukromé třídy návrhový vzor usiluje o snížení expozice atributů omezením jejich viditelnosti. Snižuje počet atributů třídy jejich zapouzdřením do jednoho Data objekt. Umožňuje návrháři tříd odebrat oprávnění k zápisu atributů, které mají být nastaveny pouze během výstavby, a to i z metod cílové třídy.

Také známý jako

PIMPL (soukromá IMPLementace) nebo Neprůhledný ukazatel

Motivace

Třída může vystavit své atributy (proměnné třídy) manipulaci, když manipulace již není žádoucí, např. po stavbě. Použití vzoru návrhu dat soukromé třídy zabrání této nežádoucí manipulaci.

Třída může mít jednorázové proměnlivé atributy, které nelze deklarovat finále. Použití tohoto návrhového vzoru umožňuje jednorázové nastavení těchto atributů třídy.

Motivace pro tento návrhový vzor pochází z cíle návrhu chránit stav třídy minimalizací viditelnosti jeho atributů (dat).

Použitelnost

Tento návrhový vzor platí pro jakoukoli třídu v mnoha objektově orientovaných jazycích.

Struktura

Účastníci

Spolupráce

Důsledky

Mezi důsledky použití tohoto návrhového vzoru patří:

  • Řízení přístupu pro zápis k atributům třídy;
  • Oddělení údajů od metod, které je používají;
  • Zapouzdření inicializace atributu třídy (dat); a
  • Poskytování nového typu finále: finále po konstruktoru.

Implementace

Vzor návrhu dat soukromé třídy řeší výše uvedené problémy extrahováním a datová třída pro cílovou třídu a poskytnutí instance cílové třídy instanci extrahované datová třída.

  • The datová třída vystavuje každý atribut (proměnnou nebo vlastnost) prostřednictvím a kariérista.
  • The datová třída vystavuje každý atribut, který se musí změnit po konstrukci pomocí a seřizovač.

Ukázkový kód

Následující C# kód ilustruje příležitost použít návrhový vzor dat soukromé třídy:

veřejnost třída Kruh{    soukromé dvojnásobek _poloměr;    soukromé Barva _barva;    soukromé Směřovat _původ;    veřejnost Kruh(dvojnásobek poloměr, Barva barva, Směřovat původ)    {        tento._poloměr = poloměr;        tento._barva = barva;        tento._původ = původ;    }    veřejnost dvojnásobek Obvod => 2 * Matematika.PI * tento._poloměr;    veřejnost dvojnásobek Průměr => 2 * tento._poloměr;    veřejnost prázdnota Kreslit(Grafika grafika)    {        //...    }}

Atributy poloměr, barva, a původ výše by se nemělo měnit po Kruh() konstruktor. Všimněte si, že viditelnost je již omezena jejich rozsahem jako soukromé, ale dělá metody třídy Kruh stále je můžete upravovat.

Nadměrné vystavení atributů vytváří typ (nežádoucího) propojení mezi metodami, které k těmto atributům přistupují. Chcete-li snížit viditelnost atributů a tím snížit propojení, implementujte vzor návrhu dat soukromé třídy následujícím způsobem:

veřejnost třída CircleData{    soukromé dvojnásobek _poloměr;    soukromé Barva _barva;    soukromé Směřovat _původ;    veřejnost CircleData(dvojnásobek poloměr, Barva barva, Směřovat původ)    {        tento._poloměr = poloměr;        tento._barva = barva;        tento._původ = původ;    }    veřejnost dvojnásobek Poloměr => tento._poloměr;    veřejnost Barva Barva => tento._barva;    veřejnost Směřovat Původ => tento._původ;}veřejnost třída Kruh{    soukromé CircleData _circleData;    veřejnost Kruh(dvojnásobek poloměr, Barva barva, Směřovat původ)    {        tento._circleData = Nový CircleData(poloměr, barva, původ);    }    veřejnost dvojnásobek Obvod => 2 * tento._circleData.Poloměr * Matematika.PI;    veřejnost dvojnásobek Průměr => tento._circleData.Poloměr * 2;    veřejnost prázdnota Kreslit(Grafika grafika)    {        //...    }}

The Kruh třída ve výsledném kódu má atribut typu CircleData zapouzdřit atributy dříve vystavené všem metodám třídy Kruh. Toto zapouzdření brání metodám ve změně atributů po Kruh() konstruktor. Všimněte si však, že jakákoli metoda Kruh stále může načítat hodnoty zapouzdřených atributů.

Známá použití

The Rámec Qt používá ve svých sdílených knihovnách datový vzor soukromé třídy.[1] Třídy, které implementují vzor, ​​zahrnují „d-ukazatel“ do datové třídy. K dispozici jsou metody pro manipulaci s proměnnými členů v datové třídě, což umožňuje změny bez narušení binární kompatibility.

Viz také

Reference

  1. ^ "D-ukazatel". Citováno 7. ledna 2017.