Nadesłany przez Piotr Synowiec, 29 kwietnia 2017 14:58
Kod przedstawiony poniżej przedstawia główną część rozwiązania problemu.Pobierz pełne rozwiązanie.
AbstractFactory.php:
<?php
// Implementacja przykladu fabryki abstrakcyjnej
// www.algorytm.org
//-------------------------------------------------------------------------------------FABRYKA_CZESCI
interface FabrykaPodzespolowKomputerowych
{
public function produkujemyDysk();
public function produkujemyGrafike();
public function produkujemyRam();
public function produkujemyProcesor();
public function produkujemyChlodzenie();
}
//----------------------------------------------------------------------------------------DYSK_TWARDY
interface Dysk
{
public function dawajDysk();
}
class DyskDlaPC implements Dysk
{
private $name = "DyskDlaPC";
public function dawajDysk()
{
print("Dodaje: " . $this->name . PHP_EOL);
return new DyskDlaPC();
}
}
class DyskDlaLaptopa implements Dysk
{
private $name = "DyskDlaLaptopa";
public function dawajDysk()
{
print("Dodaje: " . $this->name . PHP_EOL);
return new DyskDlaLaptopa();
}
}
//------------------------------------------------------------------------------------KARTA_GRAFICZNA
interface Grafika
{
public function dawajGrafike();
}
class GrafikaDlaPC implements Grafika
{
private $name = "GrafikaDlaPC";
public function dawajGrafike()
{
print("Dodaje: " . $this->name . PHP_EOL);
return new GrafikaDlaPC();
}
}
class GrafikaDlaLaptopa implements Grafika
{
private $name = "GrafikaDlaLaptopa";
public function dawajGrafike()
{
print("Dodaje: " . $this->name . PHP_EOL);
return new GrafikaDlaLaptopa();
}
}
//-----------------------------------------------------------------------------------------PAMIEC_RAM
interface Ram
{
public function dawajRam();
}
class DDR3 implements Ram
{
private $name = "DDR3";
public function dawajRam()
{
print("Dodaje: " . $this->name . PHP_EOL);
return new DDR3();
}
}
class DDR2 implements Ram
{
private $name = "DDR2";
public function dawajRam()
{
print("Dodaje: " . $this->name . PHP_EOL);
return new DDR2();
}
}
//-------------------------------------------------------------------------------------------PROCESOR
interface Procesor
{
public function dawajProcesor();
}
class ProcesorDlaPC implements Procesor
{
private $name = "ProcesorDlaPC";
public function dawajProcesor()
{
print("Dodaje: " . $this->name . PHP_EOL);
return new ProcesorDlaPC();
}
}
class ProcesorDlaLaptopa implements Procesor
{
private $name = "ProcesorDlaLaptopa";
public function dawajProcesor()
{
print("Dodaje: " . $this->name . PHP_EOL);
return new ProcesorDlaLaptopa();
}
}
//-----------------------------------------------------------------------------------------CHLODZENIE
interface Chlodzenie
{
public function dawajChlodzenie();
}
class ChlodzenieDlaLaptopa implements Chlodzenie
{
private $name = "ChlodzenieDlaLaptopa";
public function dawajChlodzenie()
{
print("Dodaje: " . $this->name . PHP_EOL);
return new ChlodzenieDlaLaptopa();
}
}
//---------------------------------------------------------------------------------------CZESCI_DO_PC
class FabrykaPodzespolowPC implements FabrykaPodzespolowKomputerowych
{
public function produkujemyDysk()
{
return new DyskDlaPC();
}
public function produkujemyGrafike()
{
return new GrafikaDlaPC();
}
public function produkujemyRam()
{
return new DDR3();
}
public function produkujemyProcesor()
{
return new ProcesorDlaPC();
}
public function produkujemyChlodzenie()
{
return null;
}
}
//------------------------------------------------------------------------------------CZESCI_DO_LAPKA
class FabrykaPodzespolowLaptop implements FabrykaPodzespolowKomputerowych
{
public function produkujemyDysk()
{
return new DyskDlaLaptopa();
}
public function produkujemyGrafike()
{
return new GrafikaDlaLaptopa();
}
public function produkujemyRam()
{
return new DDR2();
}
public function produkujemyProcesor()
{
return new ProcesorDlaLaptopa();
}
public function produkujemyChlodzenie()
{
return new ChlodzenieDlaLaptopa();
}
}
//-------------------------------------------------------------------------------ABSTRAKCYJNY_PRODUKT
abstract class Komputer
{
protected $dysk;
protected $grafika;
protected $ram;
protected $procesor;
protected $chlodzenie;
public abstract function skladanie();
public function instalowanieOprogramowania()
{
print("Instaluje oprogramowanie..." . PHP_EOL);
}
public function pakowanie()
{
print("Pakuje sprzet..." . PHP_EOL);
}
public function sprzedawanie()
{
print("Sprzedaje sprzet..." . PHP_EOL);
}
}
//-------------------------------------------------------------------------------------TUTAJ_SKLADAMY
class FabrykaKomputerow
{
public function wydajKomputer($model)
{
$komputer = $this->zlozKomputer($model);
$komputer->instalowanieOprogramowania();
$komputer->pakowanie();
$komputer->sprzedawanie();
return $komputer;
}
protected function zlozKomputer($model)
{
$komputer = null;
if(strtoupper($model) == "PC") {
$komputer = new KomputerPC(new FabrykaPodzespolowPC());
} else if(strtoupper($model) == "LAPTOP") {
$komputer = new Laptop(new FabrykaPodzespolowLaptop());
}
return $komputer;
}
}
//-------------------------------------------------------------------------------------------------PC
class KomputerPC extends Komputer
{
private $fabrykaPodzespolowKomputerowych;
public function KomputerPC($fabryka)
{
$this->fabrykaPodzespolowKomputerowych = $fabryka;
$this->skladanie();
}
public function skladanie()
{
$this->dysk = $this->fabrykaPodzespolowKomputerowych->produkujemyDysk()->dawajDysk();
$this->grafika = $this->fabrykaPodzespolowKomputerowych->produkujemyGrafike()->dawajGrafike();
$this->procesor = $this->fabrykaPodzespolowKomputerowych->produkujemyProcesor()->dawajProcesor();
$this->ram = $this->fabrykaPodzespolowKomputerowych->produkujemyRam()->dawajRam();
}
}
//----------------------------------------------------------------------------------------------LAPEK
class Laptop extends Komputer
{
private $fabrykaPodzespolowLaptop;
public function Laptop($fabryka)
{
$this->fabrykaPodzespolowLaptop = $fabryka;
$this->skladanie();
}
public function skladanie()
{
$this->dysk = $this->fabrykaPodzespolowLaptop->produkujemyDysk()->dawajDysk();
$this->grafika = $this->fabrykaPodzespolowLaptop->produkujemyGrafike()->dawajGrafike();
$this->procesor = $this->fabrykaPodzespolowLaptop->produkujemyProcesor()->dawajProcesor();
$this->ram = $this->fabrykaPodzespolowLaptop->produkujemyRam()->dawajRam();
$this->chlodzenie = $this->fabrykaPodzespolowLaptop->produkujemyChlodzenie()->dawajChlodzenie();
}
}
//-----------------------------------------------------------------------------------------------MAIN
$fabrykaKomputerow = new FabrykaKomputerow();
print("PC" . PHP_EOL);
$pc = $fabrykaKomputerow->wydajKomputer("PC");
print(PHP_EOL . "LAPTOP" . PHP_EOL);
$laptop = $fabrykaKomputerow->wydajKomputer("Laptop");

