Kompozitni dizajn uzorka u Javi

1. Uvod

U ovom brzom vodiču predstavit ćemo složeni obrazac dizajna u Javi.

Opisat ćemo strukturu i svrhu njezine uporabe.

2. Struktura

Sastavljeni uzorak treba omogućiti tretiranje pojedinačnih predmeta i kompozicija predmeta ili „kompozita“ na isti način.

Može se promatrati kao struktura stabla koja se sastoji od tipova koji nasljeđuju osnovni tip, a može predstavljati jedan dio ili cijelu hijerarhiju objekata.

Uzorak možemo podijeliti na:

  • komponenta - osnovno je sučelje za sve objekte u kompoziciji. To bi trebalo biti sučelje ili apstraktna klasa s uobičajenim metodama za upravljanje dječjim kompozitima.
  • leaf - provodi zadano ponašanje osnovne komponente. Ne sadrži referencu na ostale objekte.
  • kompozit - ima elemente lista. Primjenjuje metode osnovnih komponenata i definira operacije povezane s djetetom.
  • klijent - ima pristup elementima kompozicije pomoću objekta osnovne komponente.

3. Praktični primjer

Sada, krenimo u provedbu. Pretpostavimo želimo izgraditi hijerarhijsku strukturu odjela u tvrtki.

3.1. Osnovna komponenta

Kao objekt komponente definirat ćemo jednostavan Odjel sučelje:

odjel javnog sučelja {void printDepartmentName (); }

3.2. Listovi

Za komponente lišća definirajmo klase za financijske i prodajne odjele:

javna klasa FinancialDepartment provodi odjel {private Integer id; privatni naziv niza; javna praznina printDepartmentName () {System.out.println (getClass (). getSimpleName ()); } // standardni konstruktor, getteri, postavljači}

Druga klasa lista, Odjel prodaje, je sličan:

javna klasa SalesDepartment implementira Department {private Integer id; privatni naziv niza; javna praznina printDepartmentName () {System.out.println (getClass (). getSimpleName ()); } // standardni konstruktor, getteri, postavljači}

Obje klase provode printDepartmentName () metodu iz osnovne komponente, gdje ispisuju nazive klasa za svaku od njih.

Također, kako su klase listova, ne sadrže druge Odjel predmeta.

Dalje, pogledajmo i složenu klasu.

3.3. Kompozitni element

Kao kompozitna klasa, stvorimo Glavni odjel razred:

javna klasa HeadDepartment provodi odjel {private Integer id; privatni naziv niza; privatni popis childDepartments; javni HeadDepartment (Integer id, String name) {this.id = id; this.name = ime; this.childDepartments = novi ArrayList (); } javna praznina printDepartmentName () {childDepartments.forEach (Department :: printDepartmentName); } javni void addDepartment (odjel odjela) {childDepartments.add (odjel); } javna praznina removeDepartment (odjel odjela) {childDepartments.remove (odjel); }}

Ovo je kompozitna klasa jer sadrži zbirku Odjel komponente, kao i metode za dodavanje i uklanjanje elemenata s popisa.

Kompozit printDepartmentName () metoda provodi se prevlačenjem popisa elemenata lista i pozivanjem odgovarajuće metode za svaki od njih.

4. Ispitivanje

Za potrebe testiranja, pogledajmo a CompositeDemo razred:

javna klasa CompositeDemo {public static void main (String args []) {Department salesDepartment = new SalesDepartment (1, "Sales department"); Odjel financialDepartment = novi odjel FinancialDepartment (2, "Financijski odjel"); HeadDepartment headDepartment = novo HeadDepartment (3, "Head department"); headDepartment.addDepartment (salesDepartment); headDepartment.addDepartment (financialDepartment); headDepartment.printDepartmentName (); }}

Prvo stvorimo dvije instance za financijske i prodajne odjele. Nakon toga instanciramo šef odjela i u njega saberemo prethodno stvorene instance.

Konačno, možemo testirati printDepartmentName () metoda sastava. Kao što i očekujemo, izlaz sadrži nazive klasa svake komponente lišća:

SalesDepartment FinancialDepartment

5. Zaključak

U ovom smo članku saznali o uzorku kompozitnog dizajna. Tekst ističe glavnu strukturu i demonstrira upotrebu kroz praktični primjer.

Kao i obično, cjeloviti kôd dostupan je u projektu Github.


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