Kompozitný návrhový vzor v Jave

1. Úvod

V tomto rýchlom návode si predstavíme kompozitný návrhový vzor v Jave.

Popíšeme štruktúru a účel jej použitia.

2. Štruktúra

Kompozitný vzor má umožniť rovnaké zaobchádzanie s jednotlivými objektmi a kompozíciami objektov alebo „kompozitmi“.

Môže sa považovať za stromovú štruktúru zloženú z typov, ktoré dedia základný typ, a môže predstavovať jednu časť alebo celú hierarchiu objektov.

Vzor môžeme rozdeliť na:

  • komponent - je základné rozhranie pre všetky objekty v kompozícii. Malo by to byť buď rozhranie, alebo abstraktná trieda s bežnými metódami na správu podradených kompozitov.
  • list - implementuje predvolené správanie základnej zložky. Neobsahuje odkaz na ďalšie objekty.
  • kompozit - má listové prvky. Implementuje metódy základných komponentov a definuje operácie súvisiace s deťmi.
  • klient - má prístup k prvkom kompozície pomocou objektu základnej zložky.

3. Praktický príklad

Poďme sa teraz venovať implementácii. Predpokladajme chceme vybudovať hierarchickú štruktúru oddelení v spoločnosti.

3.1. Základný komponent

Ako komponentný objekt definujeme jednoduchý Oddelenie rozhranie:

verejné rozhranie Department {void printDepartmentName (); }

3.2. listy

Pre komponenty listu definujme triedy pre finančné a obchodné oddelenia:

verejná trieda FinancialDepartment implementuje Department {private Integer id; súkromné ​​meno reťazca; public void printDepartmentName () {System.out.println (getClass (). getSimpleName ()); } // štandardný konštruktor, getre, setre}

Druhá trieda listov, Obchodné oddelenie, je podobný:

verejná trieda SalesDepartment implementuje Department {private Integer id; súkromné ​​meno reťazca; public void printDepartmentName () {System.out.println (getClass (). getSimpleName ()); } // štandardný konštruktor, getre, setre}

Obe triedy implementujú printDepartmentName () metóda zo základnej zložky, kde pre každú z nich vytlačia názvy tried.

Pretože sú to triedy listov, neobsahujú ani ďalšie Oddelenie predmety.

Ďalej sa pozrieme tiež na zloženú triedu.

3.3. Kompozitný prvok

Ako zložená trieda vytvorme a HeadDepartment trieda:

verejná trieda HeadDepartment implementuje Department {private Integer id; súkromné ​​meno reťazca; súkromný zoznam childDepartments; public HeadDepartment (Integer id, String name) {this.id = id; this.name = meno; this.childDepartments = new ArrayList (); } public void printDepartmentName () {childDepartments.forEach (Department :: printDepartmentName); } public void addDepartment (Department department) {childDepartments.add (department); } public void removeDepartment (oddelenie oddelenia) {childDepartments.remove (oddelenie); }}

Toto je zložená trieda, pretože obsahuje zbierku Oddelenie komponenty, ako aj metódy pridávania a odstraňovania prvkov zo zoznamu.

Zložený printDepartmentName () metóda sa implementuje iteráciou zoznamu listových prvkov a vyvolaním príslušnej metódy pre každý z nich.

4. Testovanie

Na účely testovania sa pozrime na a CompositeDemo trieda:

public class CompositeDemo {public static void main (String args []) {Department salesDepartment = new SalesDepartment (1, "Sales department"); Department financialDepartment = new FinancialDepartment (2, "Financial department"); HeadDepartment headDepartment = nový HeadDepartment (3, „Hlavné oddelenie“); headDepartment.addDepartment (salesDepartment); headDepartment.addDepartment (financialDepartment); headDepartment.printDepartmentName (); }}

Najskôr vytvoríme dve inštancie pre finančné a obchodné oddelenie. Potom vytvoríme inštanciu hlavného oddelenia a sčítame doň predtým vytvorené inštancie.

Nakoniec môžeme otestovať printDepartmentName () kompozičná metóda. Ako očakávame, výstup obsahuje názvy tried každého komponentu listu:

Obchodné oddelenie Finančné oddelenie

5. Záver

V tomto článku sme sa dozvedeli o kompozitnom dizajnovom vzore. Zápis zdôrazňuje hlavnú štruktúru a demonštruje použitie na praktickom príklade.

Kompletný kód je ako obvykle k dispozícii v projekte Github.


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