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");
}
}

