algorytm.org

Implementacja w C#

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 C#
Ocena użytkownikóww: *****  / 8
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.

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();
        }
    }
}
Komentarze
photo
+4 # tombla 2012-06-20 15:16
W jakim celu wywołujesz w metodzie składanie() w klasie komputerPC funkcje np produkujemyDysk ().dawajDysk(), skoro już sama metoda produkujemyDysk () zwróci Ci Dysk?
Odpowiedz | Odpowiedz z cytatem | Cytować
Dodaj komentarz