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