Nadesłany przez Piotr Synowiec, 29 kwietnia 2017 13:43
Kod przedstawiony poniżej przedstawia główną część rozwiązania problemu.Pobierz pełne rozwiązanie.
builder.php:
<?php
// Wzorzec Projektowy Builder(budowniczy)
// www.algorytm.org
/* produkt koncowy */
class ZestawKomputerowy
{
private $monitor;
private $procesor;
private $grafika;
private $ram;
private $hdd;
public function setMonitor($monitor)
{
$this->monitor = $monitor;
}
public function setProcesor($procesor)
{
$this->procesor = $procesor;
}
public function setGrafika($grafika)
{
$this->grafika = $grafika;
}
public function setRam($ram)
{
$this->ram = $ram;
}
public function setHdd($hdd)
{
$this->hdd = $hdd;
}
public function show()
{
if($this->monitor != null) {
print("Monitor = " . $this->monitor . PHP_EOL);
}
if($this->procesor != null) {
print("Procesor = " . $this->procesor . PHP_EOL);
}
if($this->grafika != null) {
print("Grafika = " . $this->grafika . PHP_EOL);
}
if($this->ram != null) {
print("RAM = " . $this->ram . PHP_EOL);
}
if($this->hdd != null) {
print("HDD = " . $this->hdd . PHP_EOL);
}
}
}
/* nasz glowny interface */
abstract class Builder
{
protected $zestawKomputerowy;
public function newZestaw()
{
$this->zestawKomputerowy = new ZestawKomputerowy();
}
public function getZestaw()
{
return $this->zestawKomputerowy;
}
public abstract function buildMonitor();
public abstract function buildProcesor();
public abstract function buildGrafika();
public abstract function buildRam();
public abstract function buildHdd();
}
class ZestawXT001 extends Builder
{
public function buildMonitor()
{
$this->zestawKomputerowy->setMonitor("Benq 19");
}
public function buildProcesor()
{
$this->zestawKomputerowy->setProcesor("amd");
}
public function buildGrafika()
{
$this->zestawKomputerowy->setGrafika("ATI");
}
public function buildRam()
{
$this->zestawKomputerowy->setRam("DDR3");
}
public function buildHdd()
{
$this->zestawKomputerowy->setHdd("Caviar");
}
}
class ZestawABC996 extends Builder
{
public function buildMonitor()
{
$this->zestawKomputerowy->setMonitor("LG");
}
public function buildProcesor()
{
$this->zestawKomputerowy->setProcesor("Intel");
}
public function buildGrafika()
{
// zestaw nie obejmuje karty graficznej
}
public function buildRam()
{
$this->zestawKomputerowy->setRam("DDR");
}
public function buildHdd()
{
$this->zestawKomputerowy->setHdd("Samsung");
}
}
/* kierownik */
class Director
{
private $builder;
public function setBuilder($builder)
{
$this->builder = $builder;
}
public function getZestaw()
{
return $this->builder->getZestaw();
}
public function skladaj()
{
$this->builder->newZestaw();
$this->builder->buildMonitor();
$this->builder->buildProcesor();
$this->builder->buildHdd();
$this->builder->buildRam();
$this->builder->buildGrafika();
}
}
$szef = new Director();
$builder1 = new ZestawXT001();
$builder2 = new ZestawABC996();
$szef->setBuilder($builder1);
$szef->skladaj();
$zestaw1 = $szef->getZestaw();
$szef->setBuilder($builder2);
$szef->skladaj();
$zestaw2 = $szef->getZestaw();
print('Zestaw 1' . PHP_EOL );
$zestaw1->show();
print(PHP_EOL);
print('Zestaw 2' . PHP_EOL );
$zestaw2->show();

