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