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.
C#.cs:
/**************************************** * Wzorzec Projektowy Abstract Factory * * (fabryka abstrakcyjna) * * www.algorytm.org * * Opracowal Dworak Kamil * *****************************************/ using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication5 { //-------------------------------------------------------------------------------------FABRYKA_CZESCI interface FabrykaPodzespolowKomputerowych { Dysk produkujemyDysk(); Grafika produkujemyGrafike(); Ram produkujemyRam(); Procesor produkujemyProcesor(); Chlodzenie produkujemyChlodzenie(); } //----------------------------------------------------------------------------------------DYSK_TWARDY interface Dysk { Dysk dawajDysk(); } class DyskDlaPC : Dysk { String name = "DyskDlaPC"; public Dysk dawajDysk(){ Console.WriteLine("Dodaje: " + name); return new DyskDlaPC(); } } class DyskDlaLaptopa : Dysk { String name = "DyskDlaLaptopa"; public Dysk dawajDysk(){ Console.WriteLine("Dodaje: " + name); return new DyskDlaLaptopa(); } } //--------------------------------------------------------------------------------------------------- //------------------------------------------------------------------------------------KARTA_GRAFICZNA interface Grafika { Grafika dawajGrafike(); } class GrafikaDlaPC : Grafika { String name = "GrafikaDlaPC"; public Grafika dawajGrafike(){ Console.WriteLine("Dodaje: " + name); return new GrafikaDlaPC(); } } class GrafikaDlaLaptopa : Grafika { String name = "GrafikaDlaPC"; public Grafika dawajGrafike(){ Console.WriteLine("Dodaje: " + name); return new GrafikaDlaPC(); } } //--------------------------------------------------------------------------------------------------- //-----------------------------------------------------------------------------------------PAMIEC_RAM interface Ram { Ram dawajRam(); } class DDR3 : Ram { String name = "DDR3"; public Ram dawajRam(){ Console.WriteLine("Dodaje: " + name); return new DDR3(); } } class DDR2 : Ram { String name = "DDR2"; public Ram dawajRam(){ Console.WriteLine("Dodaje: " + name); return new DDR2(); } } //--------------------------------------------------------------------------------------------------- //-------------------------------------------------------------------------------------------PROCESOR interface Procesor { Procesor dawajProcesor(); } class ProcesorDlaPC : Procesor { String name = "ProcesorDlaPC"; public Procesor dawajProcesor(){ Console.WriteLine("Dodaje: " + name); return new ProcesorDlaPC(); } } class ProcesorDlaLaptopa : Procesor { String name = "ProcesorDlaLaptopa"; public Procesor dawajProcesor(){ Console.WriteLine("Dodaje: " + name); return new ProcesorDlaLaptopa(); } } //--------------------------------------------------------------------------------------------------- //-----------------------------------------------------------------------------------------CHLODZENIE interface Chlodzenie { Chlodzenie dawajChlodzenie(); } class ChlodzenieDlaLaptopa : Chlodzenie{ String name = "ChlodzenieDlaLaptopa"; public Chlodzenie dawajChlodzenie(){ Console.WriteLine("Dodaje: " + name); return new ChlodzenieDlaLaptopa(); } } //---------------------------------------------------------------------------------------CZESCI_DO_PC class FabrykaPodzespolowPC : 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 : 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 { protected Dysk dysk; protected Grafika grafika; protected Ram ram; protected Procesor procesor; protected Chlodzenie chlodzenie; public abstract void skladanie(); public void instalowanieOprogramowania(){ Console.WriteLine("Instaluje oprogramowanie..."); } public void pakowanie(){ Console.WriteLine("Pakuje sprzet..."); } public void sprzedawanie(){ Console.WriteLine("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.Equals("PC")){ komputer = new KomputerPC(new FabrykaPodzespolowPC()); } else if(model.Equals("Laptop")){ komputer = new Laptop(new FabrykaPodzespolowLaptop()); } return komputer; } } //-------------------------------------------------------------------------------------------------PC class KomputerPC : Komputer { FabrykaPodzespolowKomputerowych fabrykaPodzespolowKomputerowych; public KomputerPC(FabrykaPodzespolowKomputerowych f){ fabrykaPodzespolowKomputerowych = f; skladanie(); } public override void skladanie(){ dysk = fabrykaPodzespolowKomputerowych.produkujemyDysk().dawajDysk(); grafika = fabrykaPodzespolowKomputerowych.produkujemyGrafike().dawajGrafike(); procesor = fabrykaPodzespolowKomputerowych.produkujemyProcesor().dawajProcesor(); ram = fabrykaPodzespolowKomputerowych.produkujemyRam().dawajRam(); } } //----------------------------------------------------------------------------------------------LAPEK class Laptop : Komputer { FabrykaPodzespolowLaptop fabrykaPodzespolowLaptop; public Laptop(FabrykaPodzespolowLaptop fabrykaPodzespolowLaptop){ this.fabrykaPodzespolowLaptop = fabrykaPodzespolowLaptop; skladanie(); } public override void skladanie(){ dysk = fabrykaPodzespolowLaptop.produkujemyDysk().dawajDysk(); grafika = fabrykaPodzespolowLaptop.produkujemyGrafike().dawajGrafike(); procesor = fabrykaPodzespolowLaptop.produkujemyProcesor().dawajProcesor(); ram = fabrykaPodzespolowLaptop.produkujemyRam().dawajRam(); chlodzenie = fabrykaPodzespolowLaptop.produkujemyChlodzenie().dawajChlodzenie(); } } //-----------------------------------------------------------------------------------------------MAIN class Program { static void Main(string[] args) { FabrykaKomputerow fabrykaKomputerow = new FabrykaKomputerow(); Console.WriteLine("PC"); Komputer pc = fabrykaKomputerow.wydajKomputer("PC"); Console.WriteLine("\n\nLaptop"); Komputer laptop = fabrykaKomputerow.wydajKomputer("Laptop"); Console.ReadLine(); } } }