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?

Fabryka abstrakcyjna (abstract factory) - Implementacja w Java
Ocena użytkownikóww: *****  / 9
SłabyŚwietny
Nadesłany przez Kamil Dworak, 25 sierpnia 2010 21: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 Abstract Factory   *
* (fabryka abstrakcyjna) 				*
* www.algorytm.org						*
* Opracowal Dworak Kamil 				*
*****************************************/


//-------------------------------------------------------------------------------------FABRYKA_CZESCI
interface FabrykaPodzespolowKomputerowych {
	public Dysk produkujemyDysk();
	public Grafika produkujemyGrafike();
	public Ram produkujemyRam();
	public Procesor produkujemyProcesor();
	public Chlodzenie produkujemyChlodzenie();
}
//----------------------------------------------------------------------------------------DYSK_TWARDY
interface Dysk {
	public Dysk dawajDysk();
}

class DyskDlaPC implements Dysk {
	String name = "DyskDlaPC";
	public Dysk dawajDysk(){
		System.out.println("Dodaje: " + name);
		return new DyskDlaPC();
	}
}

class DyskDlaLaptopa implements Dysk {
	String name = "DyskDlaLaptopa";
	public Dysk dawajDysk(){
		System.out.println("Dodaje: " + name);
		return new DyskDlaLaptopa();
	}
}
//---------------------------------------------------------------------------------------------------
//------------------------------------------------------------------------------------KARTA_GRAFICZNA
interface Grafika {
	public Grafika dawajGrafike();
}

class GrafikaDlaPC implements Grafika {
	String name = "GrafikaDlaPC";
	public Grafika dawajGrafike(){
		System.out.println("Dodaje: " + name);
		return new GrafikaDlaPC();
	}
}

class GrafikaDlaLaptopa implements Grafika {
	String name = "GrafikaDlaPC";
	public Grafika dawajGrafike(){
		System.out.println("Dodaje: " + name);
		return new GrafikaDlaPC();
	}
}
//---------------------------------------------------------------------------------------------------
//-----------------------------------------------------------------------------------------PAMIEC_RAM
interface Ram {
	public Ram dawajRam();
}

class DDR3 implements Ram {
	String name = "DDR3";
	public Ram dawajRam(){
		System.out.println("Dodaje: " + name);
		return new DDR3();
	}
}

class DDR2 implements Ram {
	String name = "DDR2";
	public Ram dawajRam(){
		System.out.println("Dodaje: " + name);
		return new DDR2();
	}
}
//---------------------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------------PROCESOR
interface Procesor {
	public Procesor dawajProcesor();
}

class ProcesorDlaPC implements Procesor {
	String name = "ProcesorDlaPC";
	public Procesor dawajProcesor(){
		System.out.println("Dodaje: " + name);
		return new ProcesorDlaPC();
	}
}

class ProcesorDlaLaptopa implements Procesor {
	String name = "ProcesorDlaLaptopa";
	public Procesor dawajProcesor(){
		System.out.println("Dodaje: " + name);
		return new ProcesorDlaLaptopa();
	}
}
//---------------------------------------------------------------------------------------------------
//-----------------------------------------------------------------------------------------CHLODZENIE
interface Chlodzenie {
	public Chlodzenie dawajChlodzenie();
}

class ChlodzenieDlaLaptopa implements Chlodzenie{
	String name = "ChlodzenieDlaLaptopa";
	public Chlodzenie dawajChlodzenie(){
		System.out.println("Dodaje: " + name);
		return new ChlodzenieDlaLaptopa();
	}
}

//---------------------------------------------------------------------------------------CZESCI_DO_PC
class FabrykaPodzespolowPC implements FabrykaPodzespolowKomputerowych {
	public Dysk produkujemyDysk(){
		return new DyskDlaPC();
	}
	
	public Grafika produkujemyGrafike(){
		return new GrafikaDlaPC();
	}
	
	public Ram produkujemyRam(){
		return new DDR3();
	}
	
	public Procesor produkujemyProcesor(){
		return new ProcesorDlaPC();
	}
	
	public Chlodzenie produkujemyChlodzenie(){
		return null;
	}
}

//------------------------------------------------------------------------------------CZESCI_DO_LAPKA
class FabrykaPodzespolowLaptop implements FabrykaPodzespolowKomputerowych{
	public Dysk produkujemyDysk(){
		return new DyskDlaLaptopa();
	}
	
	public Grafika produkujemyGrafike(){
		return new GrafikaDlaLaptopa();
	}
	
	public Ram produkujemyRam(){
		return new DDR2();
	}
	
	public Procesor produkujemyProcesor(){
		return new ProcesorDlaLaptopa();
	}
	
	public Chlodzenie produkujemyChlodzenie(){
		return new ChlodzenieDlaLaptopa();
	}
}

//-------------------------------------------------------------------------------ABSTRAKCYJNY_PRODUKT
abstract class Komputer {
	Dysk dysk;
	Grafika grafika;
	Ram ram;
	Procesor procesor;
	Chlodzenie chlodzenie;
	
	public abstract void skladanie();
	
	public void instalowanieOprogramowania(){
		System.out.println("Instaluje oprogramowanie...");
	}
	
	public void pakowanie(){
		System.out.println("Pakuje sprzet...");
	}
	public void sprzedawanie(){
		System.out.println("Sprzedaje sprzet...");
	}
}

//-------------------------------------------------------------------------------------TUTAJ_SKLADAMY
class FabrykaKomputerow {
	public Komputer wydajKomputer(String model){
		Komputer komputer = zlozKomputer(model);
		komputer.instalowanieOprogramowania();
		komputer.pakowanie();
		komputer.sprzedawanie();
		return komputer;
	}
	
	protected Komputer zlozKomputer(String model){
		Komputer komputer = null;
		if(model.equalsIgnoreCase("PC")){
			komputer =  new KomputerPC(new FabrykaPodzespolowPC());
		} else if(model.equalsIgnoreCase("Laptop")){
			komputer = new Laptop(new FabrykaPodzespolowLaptop());
		}
		return komputer;
	}
}

//-------------------------------------------------------------------------------------------------PC
class KomputerPC extends Komputer {
	FabrykaPodzespolowKomputerowych fabrykaPodzespolowKomputerowych;
	
	public KomputerPC(FabrykaPodzespolowKomputerowych f){
		fabrykaPodzespolowKomputerowych = f;
		skladanie();
	}
	
	public void skladanie(){
		dysk = fabrykaPodzespolowKomputerowych.produkujemyDysk().dawajDysk();
		grafika = fabrykaPodzespolowKomputerowych.produkujemyGrafike().dawajGrafike();
		procesor = fabrykaPodzespolowKomputerowych.produkujemyProcesor().dawajProcesor();
		ram = fabrykaPodzespolowKomputerowych.produkujemyRam().dawajRam();
	}
}

//----------------------------------------------------------------------------------------------LAPEK
class Laptop extends Komputer {
	FabrykaPodzespolowLaptop fabrykaPodzespolowLaptop;
	
	public Laptop(FabrykaPodzespolowLaptop fabrykaPodzespolowLaptop){
		this.fabrykaPodzespolowLaptop = fabrykaPodzespolowLaptop;
		skladanie();
	}
	
	public void skladanie(){
		dysk = fabrykaPodzespolowLaptop.produkujemyDysk().dawajDysk();
		grafika = fabrykaPodzespolowLaptop.produkujemyGrafike().dawajGrafike();
		procesor = fabrykaPodzespolowLaptop.produkujemyProcesor().dawajProcesor();
		ram = fabrykaPodzespolowLaptop.produkujemyRam().dawajRam();
		chlodzenie = fabrykaPodzespolowLaptop.produkujemyChlodzenie().dawajChlodzenie();
	}
}

//-----------------------------------------------------------------------------------------------MAIN
public class Factory {
	public static void main(String[]args){
		FabrykaKomputerow fabrykaKomputerow = new FabrykaKomputerow();
		System.out.println("PC");
		Komputer pc = fabrykaKomputerow.wydajKomputer("PC");
		System.out.println("\n\nLaptop");
		Komputer laptop = fabrykaKomputerow.wydajKomputer("Laptop");
	}
}
Dodaj komentarz