Návrhový vzor Composite představuje řešení, jak uspořádat jednoduché objekty a z nich složené (kompozitní) objekty. Snahou vzoru je, aby k oběma typům objektů (jednoduchým a složeným) bylo možné přistoupit jednotným způsobem.

UML diagram návrhového vzoru Composite

Implementace composite v jazyce Java editovat

V ukázce je stádo ve kterém jsou objekty psů a krav. Oba umí vytvořit nějaký zvuk. Pomocí tohoto návrhového vzoru můžeme udělat velké stádo které obsahuje více malých stád a nechat udělat daný zvuk všech zvířat které jsou ve velkém stádu.

import java.util.ArrayList;
import java.util.Iterator;

public class Main {

    public static void main(String[] args) {
        Dog dog1 = new Dog();
        Cow cow1 = new Cow();
        AnimalGang dogGang = new AnimalGang(); //vytvoření stáda psů
        dogGang.add(dog1);
        dogGang.add(dog1);
        dogGang.add(dog1);
        AnimalGang cowGang = new AnimalGang(); //vytvoření stáda krav
        cowGang.add(cow1);
        cowGang.add(cow1);
        AnimalGang allAnimalsGang = new AnimalGang(); //vytvoření stáda všech zvířat
        allAnimalsGang.add(dogGang); //přidání stáda psů do celkového stáda zvířat
        allAnimalsGang.add(cowGang); //přidání stáda krav do celkového stáda zvířat

        allAnimalsGang.makeSound(); //celkové stádo zvířat udělá nějaký zvuk
    }
}
/**
Společný interface pro zvířata, která umí udělat nějaký zvuk
 */
interface Animal {
    public void makeSound(); //abstraktní metoda makeSound() představuje že zvíře dokáže udělat nějaký zvuk např. pes štěká, kráva bučí, kočka mňouká atd..
}
class Dog implements Animal{
    /**
    konkrétní implementace abstraktní metody makeSound() u psa
    */
    public void makeSound() { 
        System.out.println("HAF HAF !!");
    }
}
class Cow implements Animal{
    /**
    konkrétní implementace abstraktní metody makeSound() u krávy
    */
    public void makeSound() {
        System.out.println("Búúúúúúú !!");
    }
}

/**
Třída pro komponování objektů typu Animal
*/
class AnimalGang implements Animal {
    // ArrayList pro uchování zvířat ve stádu
    private ArrayList<Animal> childAnimals = new ArrayList<Animal>();

    public void makeSound() {
        Iterator<Animal> it = childAnimals.iterator();
        while(it.hasNext()){
            Animal animal = it.next();
            animal.makeSound();
        }
    }
    public void add(Animal _animal){
        this.childAnimals.add(_animal);
    }
    public void remove(Animal _animal){
        this.childAnimals.remove(_animal);
    }
}

Související články editovat

Externí odkazy editovat