Datový vzor soukromé třídy - Private class data pattern
![]() | Tento článek má několik problémů. Prosím pomozte vylepši to nebo diskutovat o těchto otázkách na internetu diskusní stránka. (Zjistěte, jak a kdy tyto zprávy ze šablony odebrat) (Zjistěte, jak a kdy odstranit tuto zprávu šablony)
|
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
![]() | Tato část je prázdná. Můžete pomoci přidávat k tomu. (Ledna 2011) |
Účastníci
![]() | Tato část je prázdná. Můžete pomoci přidávat k tomu. (Ledna 2011) |
Spolupráce
![]() | Tato část je prázdná. Můžete pomoci přidávat k tomu. (Ledna 2011) |
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é
- Strukturální vzor pro související vzory.
Reference
- ^ "D-ukazatel". Citováno 7. ledna 2017.