CodeGym/Java tanfolyam//Szerkezeti minták

Szerkezeti minták

Szint, Lecke
Elérhető

2.1 Adapter

Az Adapter (Adapter) egy szerkezeti tervezési minta, amely egy olyan objektum funkcióinak használatának megszervezésére szolgál, amely nem módosítható egy speciálisan létrehozott interfészen keresztül.

A hivatalos meghatározás kissé trükkös, de ha saját szavaival írja le, akkor az adapter olyan tervezési minta, amely lehetővé teszi az inkompatibilis interfésszel rendelkező objektumok együttműködését .

adapter minta

Egy olyan objektum funkcióinak használatának megszervezésére szolgál , amely nem módosítható egy speciálisan létrehozott felületen keresztül. Létrejön egy további osztály, amely rendelkezik a szükséges interfésszel, és ez az osztály hívja meg a kívánt objektum metódusait (amely nem rendelkezik a szükséges interfésszel).

Fontos! Ha a kódban találkozik az Adapter utótaggal egy osztályhoz, akkor jogában áll úgy tekinteni, hogy ez az osztály adapterként működik, és olyan osztályok csoportjához van társítva, amelyek a fent leírt séma szerint működnek.

Olyan esetekben használják , amikor a rendszer támogatja a szükséges adatokat és viselkedést, de nem megfelelő felülettel rendelkezik. Az Adapter minta leggyakrabban akkor használatos, amikor egy új vagy meglévő absztrakt osztályból örökölt osztályt szeretne létrehozni.

Erősségek:

  • Más külső osztályok használatára való áttérés nem igényli magát a rendszert, elég egy további Adapter osztályt megvalósítani.
  • Függetlenség a külső osztályok megvalósításától (olyan könyvtárak osztályai, amelyek kódját nem tudjuk megváltoztatni). A program függetlenné válik a külső osztályok felületétől.

2.2 Dekorátorok

A Decorator egy szerkezeti tervezési minta, amellyel dinamikusan hozzárendelhető további viselkedés egy objektumhoz. A Decorator minta jó és rugalmas alternatívát kínál az alosztályozás gyakorlatához a funkcionalitás kiterjesztése érdekében.

Dekorátor minta

További kötelezettségek objektumhoz való dinamikus összekapcsolására szolgál .

Sokan felteszik a kérdést: hogyan lehet dinamikusan (a program futása közben) új viselkedést hozzáadni egy objektumhoz? Egy tárgy darabokból, azaz kis tárgyakból is összeállítható. Emlékszel a szűrőláncokra a szervletekben? Vagy a Stream API-t, amikor lekérdezést írt a filter(), map(), list() használatával?

IntStream.of(50, 60, 70, 80, 90).filter(x -> x < 90).map(x -> x + 10).limit(3).forEach(System.out::print);

A Decorator minta erősségei:

  • Nincs szükség alosztályok létrehozására egy objektum funkcionalitásának kiterjesztéséhez.
  • Lehetőség új funkciók dinamikus csatlakoztatására bárhol: a ConcreteComponent objektum fő funkciói előtt vagy után.

2.3 Proxyk

A proxy egy szerkezeti tervezési minta, amely olyan objektumot biztosít, amely szabályozza a hozzáférést egy másik objektumhoz, elfogva és áthaladva az összes híváson.

helyettes (meghatalmazott)

A Proxy minta helyettesítő objektumot biztosít a valódi objektum helyett. Ez az objektum szabályozza az eredeti objektumhoz való hozzáférést. Nagyon gyakran használt.

Emlékszel, hogyan használtuk a Mockito keretrendszert, és hogyan fogtunk el egy valós objektum hívását a Mockito.spy() metódussal vagy a @Spy annotációval? Ekkor jött létre egy speciális Proxy objektum, amelyen keresztül az eredeti objektum összes hívása átment.

Ezután kezelhetjük ezeket a hívásokat úgy, hogy szabályokat adunk az objektumhoz. Így van - az eredeti objektum nem változik, és a vele való munka sokkal rugalmasabbá válik. Különösen akkor hasznos, ha nem a kódunkból hívjuk meg a proxy objektumot, hanem átadjuk valahova. Így irányítva két tőlünk független objektum kommunikációját.

A proxyk típusai cél szerint:

  • Naplózási proxy : naplózza az összes „Tárgy” hívását a paramétereivel együtt.
  • Távoli proxy (távoli proxy): kommunikációt biztosít a „Tárgy”-tal, amely egy másik címtérben vagy egy távoli gépen található. Felelős lehet a kérés és argumentumai kódolásáért, valamint a kódolt kérés elküldéséért a valódi „Tárgynak”.
  • Virtuális proxy (virtuális proxy): biztosítja, hogy a valódi "Tárgy" csak akkor kerüljön létrehozásra, amikor valóban szükség van rá. Ezenkívül gyorsítótárba helyezheti a valódi "Tárgy"-ról szóló információkat, hogy késleltesse a létrehozását.
  • Copy-on-write : A „tárgy” másolatát adja meg, amikor az ügyfél bizonyos műveleteket hajt végre (a „virtuális proxy” speciális esete).
  • Védelmi proxyk : Ellenőrizheti, hogy a hívó rendelkezik-e a kérés benyújtásához szükséges engedélyekkel.
  • Gyorsítótárazási proxy : A számítási eredmények ideiglenes tárolását biztosítja, mielőtt több ügyfél számára kiszolgálná őket, akik megoszthatják az eredményeket.
  • Screening Proxy: Megvédi az "alanyt" a veszélyes ügyfelektől (vagy fordítva).
  • Szinkronizálási proxy : szinkronizált hozzáférés-vezérlést hajt végre a „Tárgy” számára egy aszinkron többszálú környezetben.
  • „Intelligens” hivatkozás (intelligens referenciaproxy): további műveleteket hajt végre, amikor a „Tárgyhoz” mutató hivatkozás jön létre, például kiszámítja a „Tárgyhoz” mutató aktív hivatkozások számát.

2.4 Híd

A Bridge minta egy szerkezeti tervezési minta, amelyet az absztrakció és a megvalósítás szétválasztására használnak, hogy azok egymástól függetlenül változhassanak.

A hídminta beágyazást, aggregációt használ, és örökléssel oszthatja meg a felelősséget az osztályok között.

Híd

Ha az absztrakciót és a megvalósítást elválasztják egymástól, egymástól függetlenül változhatnak. Más szóval, ha a hídmintán keresztül valósítják meg, az interfész szerkezetének megváltoztatása nem zavarja az implementáció szerkezetének megváltoztatását.

Tekintsünk egy ilyen absztrakciót alaknak. Sokféle alakzat létezik, mindegyiknek megvan a maga sajátossága és módszere. Van azonban valami, ami az összes figurát egyesíti. Például minden alakzatnak képesnek kell lennie arra, hogy megrajzolja magát, méretarányos stb.

Ugyanakkor a rajzgrafikák az operációs rendszer vagy a grafikus könyvtár típusától függően eltérőek lehetnek. Az alakzatoknak képesnek kell lenniük önmaguk rajzolására különféle grafikus környezetekben. De nem praktikus az összes rajzolási módszert minden alakzatban megvalósítani, vagy az alakzatot minden alkalommal módosítani, amikor a rajzolási módszer megváltozik.

Ebben az esetben a hídminta segít, lehetővé téve új osztályok létrehozását, amelyek különféle grafikus környezetekben valósítják meg a rajzot. Ezzel a megközelítéssel nagyon könnyű új alakzatokat hozzáadni és megrajzolni őket.

Az ábrákon a nyíllal ábrázolt kapcsolatnak 2 jelentése lehet: a) „egyfajta”, a Liskov-helyettesítés elvének megfelelően, és b) az absztrakció egyik lehetséges megvalósítása. A nyelvek általában öröklődést használnak az a) és a b) megvalósítására, ami hajlamos az osztályhierarchiák felduzzasztására.

A híd pontosan ennek a problémának a megoldására szolgál: az objektumok párban jönnek létre az A hierarchia és a B hierarchia osztályába tartozó objektumokból, az A hierarchián belüli öröklődés Liskov szerint „változatos”, a „megvalósítás” fogalma szerint. az absztrakció” hivatkozást használnak az A objektumról a párosított B objektumra.

2.5 Homlokzat

A homlokzati minta egy szerkezeti tervezési minta, amely elrejti a rendszer összetettségét azáltal, hogy az összes lehetséges külső hívást egyetlen objektumra csökkenti, amely a rendszer megfelelő objektumaira delegálja azokat.

Homlokzati sablon

Hogyan biztosíthatunk egységes interfészt különböző megvalósításokkal vagy interfészekkel, például egy alrendszerhez, ha nem kívánatos az erős csatolás ahhoz az alrendszerhez, vagy az alrendszer megvalósítása megváltozhat?

Határozzon meg egy interakciós pontot az alrendszerrel - egy homlokzati objektumot, amely közös interfészt biztosít az alrendszerrel, és rendelje hozzá az összetevőivel való interakcióért. A homlokzat egy külső objektum, amely egyetlen belépési pontot biztosít az alrendszer-szolgáltatások számára.

A többi alrendszer-összetevő megvalósítása privát, és nem látható a külső összetevők számára. A homlokzati objektum a GRASP minta megvalósítását biztosítja. Ellenáll a változásoknak az alrendszer megvalósításának változásaival szembeni védelem szempontjából.

Fontos! Ezt a mintát akkor használjuk, ha teljesen el akarjuk rejteni az objektumok egy csoportját, és a velük folytatott kommunikációt az objektumunkon keresztül szeretnénk átadni. Ha csak némi irányítást szeretne biztosítani az objektumok kommunikációs folyamata felett, és nem feltétlenül szeretné elrejteni őket, akkor jobb a Proxy minta használata.

1
Feladat
szintlecke
Zárt
Through the Nail with a Microscope
task4101
1
Feladat
szintlecke
Zárt
Signature Recipe
task4102
1
Feladat
szintlecke
Zárt
Surprise, Anonymous!
task4103
1
Feladat
szintlecke
Zárt
Fantastic Creatures
task4104
1
Feladat
szintlecke
Zárt
Alchemy Library
task4105
Hozzászólások
  • Népszerű
  • Új
  • Régi
Hozzászólás írásához be kell jelentkeznie
Ennek az oldalnak még nincsenek megjegyzései