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