algorytm.org

Implementacja w Java



Baza Wiedzy
wersja offline serwisu przeznaczona na urządzenia z systemem Android
Darowizny
darowiznaWspomóż rozwój serwisu
Nagłówki RSS
Artykuły
Implementacje
Komentarze
Forum
Bookmarki






Sonda
Implementacji w jakim języku programowania poszukujesz?

Metoda wytwórcza (factory method) - Implementacja w Java
Ocena użytkownikóww: *****  / 10
SłabyŚwietny
Nadesłany przez Kamil Dworak, 20 sierpnia 2010 22:00
Kod przedstawiony poniżej przedstawia główną część rozwiązania problemu.
Pobierz pełne rozwiązanie.

Jeżeli nie odpowiada Ci sposób formatowania kodu przez autora skorzystaj z pretty printer'a i dostosuj go automatycznie do siebie.

JAVA.java:
/****************************************
* Wzorzec Projektowy Factody Method		*
* (metoda fabrykujaca) 					*
* www.algorytm.org						*
* Opracowal Dworak Kamil 				*
*****************************************/

/* nasz uogolniony produkt */
abstract class Czekolada {
	protected String about;
	
	public abstract Czekolada dawajCzekolade();
	
	protected void dodajeKakao(){
		System.out.println("Dodaje kakao...");
	}
}

/* bardziej konkretny produkt  #1*/
class Mleczna extends Czekolada {
	public Mleczna(){
		about = "Mleczna";
	}

	public void dodajeMleko(){
		System.out.println("Dodaje mleko...");
	}
	
	public void dodajeCukier(){
		System.out.println("Dodaje cukier...");
	}
	
	public Czekolada dawajCzekolade(){
		System.out.println(about);
		dodajeKakao();
		dodajeCukier();
		dodajeMleko();
		return this;
	}
}

/* bardziej konkretny produkt  #2*/
class ZOrzechamiIBakaliami extends Czekolada{
	public ZOrzechamiIBakaliami(){
		about = "Z orzechami i bakaliami";
	}

	public void dodajeOrzechy(){
		System.out.println("Dodaje orzechy...");
	}
	
	public void dodajeBakalie(){
		System.out.println("Dodaje bakalie...");
	}
	
	public void dodajeCukier(){
		System.out.println("Dodaje cukier...");
	}
	
	public Czekolada dawajCzekolade(){
		System.out.println(about);
		dodajeKakao();
		dodajeCukier();
		dodajeOrzechy();
		dodajeBakalie();
		return this;
	}
}

/* bardziej konkretny produkt  #3*/
class Gorzka extends Czekolada {
	public Gorzka(){
		about = "Gorzka";
	}
	
	public void dodajeEkstratWaniliowy(){
		System.out.println("Dodaje ekstrat waniliowy...");
	}
	
	public Czekolada dawajCzekolade(){
		System.out.println(about);
		dodajeKakao();
		dodajeEkstratWaniliowy();
		return this;
	}
}

/* nasz stworca */
class ProducentCzekolady{	
	public Czekolada produkcjaCzekolady(String about){
		Czekolada czekolada = null;
		
		/* teraz decyduje o tym, ktora czekolade wytworzy */
		if(about.equalsIgnoreCase("Mleczna")){
			czekolada = new Mleczna();
		}
		else if(about.equalsIgnoreCase("Z orzechami i bakaliami")){
			czekolada = new ZOrzechamiIBakaliami();
		}
		else if(about.equalsIgnoreCase("Gorzka")){
			czekolada = new Gorzka();
		}
		return czekolada.dawajCzekolade();
	}
}

public class Main {
	public static void main(String[]args){
		
		ProducentCzekolady producent = new ProducentCzekolady();
		Czekolada[] tab = new Czekolada[3];
		
		tab[0] = producent.produkcjaCzekolady("Gorzka");
		System.out.println("--------------------------------------------------------------");
		tab[1] = producent.produkcjaCzekolady("Z orzechami i bakaliami");
		System.out.println("--------------------------------------------------------------");
		tab[2] = producent.produkcjaCzekolady("Mleczna");
	}
}
Komentarze
photo
+4 # Przemek K. 2012-04-14 08:48
To nie jest wzorzec "Metoda wytwórcza", a wzorzec "Fabryka"!

Metoda wytwórcza wymaga abstrakcyjnej klasy fabryki i różnych jej implementacji w klasach pochodnych.

Jakby było:

class Producent {
public abstract Czekolada produkcjaCzekol ady(String about)
}

a potem:
class ProducentCzekol ady extends Producent {
...

to dopiero by była fabryka wytwórcza
Odpowiedz | Odpowiedz z cytatem | Cytować
Dodaj komentarz