[[oktatas:programozás:tervezési minták|< Tervezési minták]] ====== Gyártó metódus ====== * **Szerző:** Sallai András * Copyright (c) Sallai András, 2014 * Licenc: GNU Free Documentation License 1.3 * Web: http://szit.hu ===== Használat ===== Akkor használjuk ha nem tudjuk milyen példányok jönnek létre. ===== Az állatgyár példa ===== {{:oktatas:programozás:tervezési_minták:gyarto_metodus.png|}} interface Allat { public void beszel(); } class Macska implements Allat { public void beszel() { System.out.println("Miau"); } } class MacskaGyar { public static Macska newMacska() { return new Macska(); } } class Program01 { public static void main(String[] args) { Macska cirmos = MacskaGyar.newMacska(); cirmos.beszel(); } } ===== Macska és kutya ===== {{:oktatas:programozás:tervezési_minták:allatgyartohatekonyabban.png}} ===== Egyetlen gyártó ===== {{:oktatas:programozás:tervezési_minták:allatgyartohatekonyabban2.png}} enum AllatFajta { MACSKA, KUTYA } interface Allat { public void beszel(); } class Macska implements Allat { public void beszel() { System.out.println("Miau"); } } class Kutya implements Allat { public void beszel() { System.out.println("Vauu"); } } class AllatGyar { public static Allat newAllat(AllatFajta allatFajta) { if(allatFajta == AllatFajta.MACSKA) return new Macska(); if(allatFajta == AllatFajta.KUTYA) return new Kutya(); return null; } } class Program01 { public static void main(String[] args) { Allat allat = AllatGyar.newAllat(AllatFajta.MACSKA); allat.beszel(); } } ===== Szokásos metódusnevek ===== Általánosan használt statikus metódusok: * valueOf() átadott paraméterrel egyenértékű objektummal tér vissza * newInstance() készít egy új példányt gyártómetódusból, amelyet meghívunk * getInstance() egy Singleton példánnyal tér vissza * getType() egyenértékű a getInstance() metódussal, de külön osztályban van * newType() egyenértékű a newInstance() metódussal, de külön osztályban van