//package Fabrika; // Factory Method primer // "Proizvod" abstract class Proizvod { } // "KonkretanProizvodA" class KonkretanProizvodA extends Proizvod { } // "KonkretanProizvodB" class KonkretanProizvodB extends Proizvod { } // "Kreator" abstract class Kreator { // Metodi abstract public Proizvod Fabrikuj(); } // "KonkretanKreatorA" class KonkretanKreatorA extends Kreator { // Metodi public Proizvod Fabrikuj() { return new KonkretanProizvodA(); } } // "KonkretanKreatorB" class KonkretanKreatorB extends Kreator { // Metodi public Proizvod Fabrikuj() { return new KonkretanProizvodB(); } } /// test rada class Ilustracija { public static void main(String[] args) { // Fabrikuj ProizvodA Kreator k = new KonkretanKreatorA(); Proizvod p = k.Fabrikuj(); System.out.println("Kreiran je " + p); // Fabrikuj ProizvodB k = new KonkretanKreatorB(); p = k.Fabrikuj(); System.out.println("Kreiran je " + p); } } /* ZAKLJUCAK: U funkciji main nemamo fragmente koda specificne za ProizvodA, ProizvodB. Oba proizvoda se fabrikuju sa p = k.Fabrikuj(); Dakle, dobili smo na fleksibilnosti, jer podklase KonkretanKreatorA, KonkretanKreatorB obezbedjuju prosirenu verziju objekta k */