Factory – ang. fabryka.
Zadanie programistyczne
Smoki produkują zabawki – smoki Draco dla dzieci.
Zabawki różnią się nazwą (płcią), kolorem i łuską.
Cykl produkcyjny obejmuje 4 czynności: przygotowanie, malowanie, dodawanie łusek, pakowanie.
Każda zabawka może mieć inne cechy wykończeniowe podawane przez zamawiającego.
Opracować schemat zamawiania i produkcji zabawek.
Rozwiązanie
Utworzyć abstrakcyjna klasę ZabawkaDraco (pola są z dostępem pakietowym).
Utworzyć klasy implementujące: SmokDraco, SmoczycaDraco, SmoczynkaDraco, SmoczekDraco.
Utworzy fabrykę FabrykaSmokow produkującą odpowiednią zabawkę.
Utworzyć hurtownię HurtowniaSmokow sprzedającą zabawki z tej fabryki.
Kody
Klasa ZabawkaDraco
package factory; import java.util.*; abstract public class ZabawkaDraco { String nazwa; String kolor; String luska; final ArrayList<String> gotowce = new ArrayList<>(); public String getName() { return nazwa; } public void przygotuj() { System.out.println("Przygotowuję " + nazwa); } public void pomaluj() { System.out.println("Maluję " + nazwa); } public void dodajLuske() { System.out.println("Dodaję łuskę dla " + nazwa); } public void zapakuj() { System.out.println("Pakuję " + nazwa); } @Override public String toString() { StringBuilder display = new StringBuilder(); display.append("---- ").append(nazwa).append(" ----\n"); display.append(kolor).append("\n"); display.append(luska).append("\n"); for (String aGotowce : gotowce) { display.append(aGotowce).append("\n"); } return display.toString(); } }
Klasa SmokDraco
package factory; class SmokDraco extends ZabawkaDraco { public SmokDraco() { nazwa = "Tata Smok"; kolor = "złoty"; luska = "kafelkowana"; gotowce.add("grzebień na grzbiecie"); gotowce.add("oczy czerwone"); gotowce.add("pazury niebieskie"); } }
Klasa SmoczycaDraco
package factory; class SmoczycaDraco extends ZabawkaDraco { public SmoczycaDraco() { nazwa = "Mama Smok"; kolor = "zielony"; luska = "gładka"; gotowce.add("bez grzebienia"); gotowce.add("oczy zielone"); } }
Klasa SmoczynkaDraco
package factory; class SmoczynkaDraco extends ZabawkaDraco { public SmoczynkaDraco() { nazwa = "Smoczynka"; kolor = "różowy"; luska = "poprzecznie prążkowana"; gotowce.add("kokardka"); } }
Klasa SmoczekDraco
package factory; class SmoczekDraco extends ZabawkaDraco { public SmoczekDraco() { nazwa = "Smoczek"; kolor = "niebieski"; luska = "karbowana"; gotowce.add("bez grzebienia"); gotowce.add("szczątkowe skrzydła"); } }
Klasa FabrykaSmoków
package factory; class FabrykaSmokow { public ZabawkaDraco wyprodukujDraco(String type) { ZabawkaDraco smok = null; switch (type) { case "smoczyca": smok = new SmoczycaDraco(); break; case "smoczek": smok = new SmoczekDraco(); break; case "smoczynka": smok = new SmoczynkaDraco(); break; case "smok": smok = new SmokDraco(); break; } return smok; } }
Klasa HurtowniaSmokow
package factory; class HurtowniaSmokow { private final FabrykaSmokow fabryka; public HurtowniaSmokow(FabrykaSmokow fabryka) { this.fabryka = fabryka; } public ZabawkaDraco zamowDraco(String type) { ZabawkaDraco smok; smok = fabryka.wyprodukujDraco(type); smok.przygotuj(); smok.pomaluj(); smok.dodajLuske(); smok.zapakuj(); return smok; } }
Klasa Main
package factory; class Main { public static void main(String[] args) { FabrykaSmokow fabryka = new FabrykaSmokow(); HurtowniaSmokow hurtownia = new HurtowniaSmokow(fabryka); ZabawkaDraco zabawka = hurtownia.zamowDraco("smoczyca"); System.out.println(zabawka.toString()); } }
Rezultat
Przygotowuję Mama Smok Maluję Mama Smok Dodaję łuskę dla Mama Smok Pakuję Mama Smok ---- Mama Smok ---- zielony gładka bez grzebienia oczy zielone