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

