Pattern (minta) kialakítás kompozit (linker)
Hozzárendelése Composite minta
Használja az összetett minta, ha:
- Meg kell egyesíteni egy csoport hasonló tárgy és kezelni őket.
- Tárgyak lehetnek egy primitív (elemi) és kompozit (összetett). Összetett objektum tartalmazhat egy gyűjtemény egyéb tárgyak komplexet képezve, fa szerkezetek. Példa: A fájlrendszer-könyvtárat elemekből áll, amelyek mindegyike lehet egy könyvtár.
- Az ügyfél kód működik egy primitív és összetett tárgyak egyenletesen.
Leírás Composite minta
Kezelése tárgycsoportok lehet ijesztő feladat, különösen, ha ezek a tárgyak saját létesítményeket.
Katonai stratégiai játék „pun háború”, amely leírja a katonai konfrontáció és Karthágó között (lásd. Szakasz generálása minták), minden harci egység (lovas, íjász, gyalogos) saját pusztító erejét. Ezek az egységek csoportosíthatók, így bonyolultabb katonai egységek, például légiók, ami viszont egyesítésével létrejött egy hadsereget. Hogyan számoljuk ki a harci erejét a hierarchikus kapcsolatok?
Összetett minta nyújt megoldást. Bevezeti absztrakt alap osztály komponens közös viselkedését minden primitív és összetett objektumokat. Az eset egy stratégiai játék - ez getStrength () kiszámításának módja, pusztító erejét. Primitív és kompozit alosztályok származnak az osztály komponens. Kompozit Kompozit objektum tárolja a komponensek leszármazott absztrakt típus komponens. amelyek mindegyike is lehet kompozit.
UML-osztály diagram mintázás Composite
Hozzáadni vagy eltávolítani leszármazottja tárgyak komponens objektum Composite. Component osztály definiálja interfészek hozzá () és a remove ().
Végrehajtási mód Composite
Összetett minta alkalmazható stratégiai játék. Először képeznek a különböző katonai egységek a római hadsereg, majd kiszámítja a pusztító erő.
Kell figyelni, hogy egy másik fontos pont. Egység absztrakt alap osztály nyilatkozik egy interfészt hozzá új addUnit harci egységeket (), annak ellenére, hogy a tárgyak a primitív típusok (Archer. Baka. Horseman) az ilyen művelet nem szükséges. Ez úgy történik, hogy a kedvéért a rendszer átláthatóságát kárára annak biztonságát. Az ügyfél tudja, hogy a Készülék típusa objektum mindig van addUnit () metódust. De a felhívás primitív tárgyakat minősül téves és veszélyes.
Tudod, hogy a rendszer biztonságosabbá mozgatásával addUnit () metódus az összetett objektum CompositeUnit. Van azonban a következő probléma: nem tudjuk, hogy a addUnit () Egység objektum módszer.
Tekintsük a következő kódrészletet.
Az absztrakt alap osztály Unit, a virtuális módszer getComposite () az alapértelmezett megvalósítása, amely visszaadja 0. CompositeUnit osztály felülírja ezt a módszert, visszatérve a mutatót is. Ezzel a módszerrel, akkor kérje a típusú alkatrész. Ha ez egy komponenst, akkor lehetőség van az addUnit () műveletet.
Alkalmazásának eredményeit mintázás kompozit
Előnyei kompozit minta
- A rendszer könnyen új primitív vagy összetett tárgyak minta Composite használ közös alap osztály komponens.
- Az ügyfél kód egy egyszerű szerkezet - a primitív és összetett tárgyak ugyanígy kezeljük.
- Összetett minta segítségével könnyen bejárható az összes csomópont a fa struktúra
Hátrányok Composite minta
- Kényelmetlen, hogy készítsen mellett tilalmat összetett objektum összetett objektumok bizonyos típusú. Például, a római hadsereg nem léphet háborús elefántok.