Nadesłany przez Kamil Dworak, 05 sierpnia 2010 21:18
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.
builder_1_cs.cs:
/****************************************
* Wzorzec Projektowy Builder *
* (budowniczy) *
* www.algorytm.org *
* Opracowal Dworak Kamil *
*****************************************/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication2
{
class Program
{
class ZestawKomputerowy
{
private String monitor;
private String procesor;
private String grafika;
private String ram;
private String hdd;
public void setMonitor(String monitor)
{
this.monitor = monitor;
}
public void setProcesor(String procesor)
{
this.procesor = procesor;
}
public void setGrafika(String grafika)
{
this.grafika = grafika;
}
public void setRam(String ram)
{
this.ram = ram;
}
public void setHdd(String hdd)
{
this.hdd = hdd;
}
public void show(){
if(monitor!=null) Console.WriteLine("Monitor = " + monitor);
if(procesor!=null) Console.WriteLine("Procesor = " + procesor);
if(grafika!=null) Console.WriteLine("Grafika = " + grafika);
if(ram!=null) Console.WriteLine("RAM = " + ram);
if (hdd != null) Console.WriteLine("HDD = " + hdd);
}
}
/* nasz glowny interface */
abstract class Builder
{
protected ZestawKomputerowy zestawKomputerowy;
public void newZestaw()
{
zestawKomputerowy = new ZestawKomputerowy();
}
public ZestawKomputerowy getZestaw()
{
return zestawKomputerowy;
}
public abstract void buildMonitor();
public abstract void buildProcesor();
public abstract void buildGrafika();
public abstract void buildRam();
public abstract void buildHdd();
}
class ZestawXT001 : Builder {
public override void buildMonitor(){
zestawKomputerowy.setMonitor("Benq 19");
}
public override void buildProcesor()
{
zestawKomputerowy.setProcesor("amd");
}
public override void buildGrafika()
{
zestawKomputerowy.setGrafika("ATI");
}
public override void buildRam()
{
zestawKomputerowy.setRam("DDR3");
}
public override void buildHdd()
{
int t;
while(true){
Console.WriteLine("Dysk do wyboru: (1) Samsung, (2) Segate, (3) Caviar");
String s = Console.ReadLine();
t =int.Parse(s);
if(t>0 && t<4) break;
}
String wynik="";
if(t==1) wynik = "Samsung";
else if(t==2) wynik = "Segate";
else if(t==3) wynik = "Caviar";
zestawKomputerowy.setHdd(wynik);
}
}
class ZestawABC996 : Builder {
public override void buildMonitor()
{
zestawKomputerowy.setMonitor("LG");
}
public override void buildProcesor()
{
zestawKomputerowy.setProcesor("INTEL");
}
public override void buildGrafika()
{
//zestaw nie obejmuje karty graficznej
}
public override void buildRam()
{
zestawKomputerowy.setRam("DDR");
}
public override void buildHdd()
{
zestawKomputerowy.setHdd("Samsung");
}
}
/* keirownik */
class Director
{
private Builder builder;
public void setBuilder(Builder builder)
{
this.builder = builder;
}
public ZestawKomputerowy getZestaw()
{
return builder.getZestaw();
}
public void skladaj()
{
builder.newZestaw();
builder.buildMonitor();
builder.buildProcesor();
builder.buildHdd();
builder.buildRam();
builder.buildGrafika();
}
}
static void Main(string[] args)
{
Director szef = new Director();
Builder builder = new ZestawXT001();
Builder builder2 = new ZestawABC996();
Console.WriteLine("\nZESTAW1");
szef.setBuilder(builder);
szef.skladaj();
ZestawKomputerowy zestaw1 = szef.getZestaw();
szef.setBuilder(builder2);
szef.skladaj();
ZestawKomputerowy zestaw2 = szef.getZestaw();
zestaw1.show();
Console.WriteLine("\n\nZESTAW2");
zestaw2.show();
String s = Console.ReadLine();
}
}
}

