Implementácia vzoru metódy šablóny v jazyku Java

1. Prehľad

V tomto rýchlom výučbe sa dozvieme, ako využiť vzor metódy šablóny - jeden z najpopulárnejších vzorov GoF.

Uľahčuje implementáciu zložitých algoritmov zapuzdrením logiky do jednej metódy.

2. Implementácia

Aby sme demonštrovali, ako vzor šablónovej metódy funguje, vytvorme si jednoduchý príklad, ktorý predstavuje vybudovanie počítačovej stanice.

Vzhľadom na definíciu vzoru, štruktúra algoritmu bude definovaná v základnej triede, ktorá definuje šablónu build () metóda:

verejná abstraktná trieda ComputerBuilder {// ... public final Computer buildComputer () {addMotherboard (); setupMotherboard (); addProcessor (); vrátiť nový počítač (computerParts); } verejné abstraktné neplatné addMotherboard (); public abstract void setupMotherboard (); verejné abstraktné neplatné addProcessor (); // ...}

The ComputerBuilder Táto trieda je zodpovedná za načrtnutie krokov potrebných na zostavenie počítača deklarovaním metód pridávania a nastavenia rôznych komponentov, napríklad základná doska a procesor.

Tu, the build () metóda je metóda šablóny, ktorý definuje kroky algoritmu na zostavenie počítačových častí a vráti sa úplne inicializované Počítač inštancie.

Všimnite si, že it je deklarované ako konečné aby sa zabránilo jeho prepísaniu.

3. V akcii

Keď už je základná trieda nastavená, skúsme ju použiť vytvorením dvoch podtried. Jeden, ktorý zostavuje „štandardný“ počítač, a druhý, ktorý zostavuje „špičkový“ počítač:

verejná trieda StandardComputerBuilder rozširuje ComputerBuilder {@Override public void addMotherboard () {computerParts.put ("Základná doska", "Štandardná základná doska"); } @Override public void setupMotherboard () {motherboardSetupStatus.add ("Skrutkovanie štandardnej základnej dosky s puzdrom."); motherboardSetupStatus.add ("Pripojenie napájacích konektorov."); motherboardSetupStatus.forEach (krok -> System.out.println (krok)); } @Override public void addProcessor () {computerParts.put ("Procesor", "Štandardný procesor"); }}

A tu je HighEndComputerBuilder varianta:

public class HighEndComputerBuilder rozširuje ComputerBuilder {@Override public void addMotherboard () {computerParts.put ("Motherboard", "High-end Motherboard"); } @Override public void setupMotherboard () {motherboardSetupStatus.add ("Skrutkovanie základnej dosky vyššej triedy k puzdru."); motherboardSetupStatus.add ("Pripojenie napájacích konektorov."); motherboardSetupStatus.forEach (step -> System.out.println (step)); } @Override public void addProcessor () {computerParts.put ("Procesor", "High-end procesor"); }}

Ako vidíme, nemuseli sme sa starať o celý proces montáže, ale iba o poskytovanie implementácií pre samostatné metódy.

Pozrime sa na to v akcii:

nový StandardComputerBuilder () .buildComputer (); .getComputerParts () .forEach ((k, v) -> System.out.println ("Časť:" + k + "Hodnota:" + v)); nový HighEndComputerBuilder () .buildComputer (); .getComputerParts () .forEach ((k, v) -> System.out.println ("Časť:" + k + "Hodnota:" + v));

4. Metódy šablón v základných knižniciach Java

Tento vzor je široko používaný v základných knižniciach Java, napríklad v súboroch java.util.AbstractList alebo java.util.AbstractSet.

Napríklad Abstraktný zoznam poskytuje základnú implementáciu Zoznam rozhranie.

Príkladom metódy šablón môže byť pridať všetko() metóda, aj keď nie je výslovne definovaná ako konečné:

public boolean addAll (int index, Collection c) {rangeCheckForAdd (index); boolean upravené = nepravda; pre (E e: c) {add (index ++, e); upravené = pravda; } návrat upravený; }

Používateľom stačí implementovať pridať () metóda:

public void add (int index, E element) {throw new UnsupportedOperationException (); }

Tu je zodpovednosťou programátora zabezpečiť implementáciu pridania prvku do zoznamu pri danom indexe (alternatívna časť algoritmu výpisu).

5. Záver

V tomto článku sme si ukázali vzor metódy šablón a spôsob jej implementácie v Jave.

Vzor šablónovej metódy podporuje opätovné použitie a oddelenie kódu, ale na úkor použitia dedičnosti.

Všetky vzorky kódu zobrazené v tomto článku sú ako vždy k dispozícii na GitHub.


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