Nadesłany przez Marek, 31 lipca 2015 15:11
Kod przedstawiony poniżej przedstawia główną część rozwiązania problemu.Pobierz pełne rozwiązanie.
strategy.php:
<?php /**************************************** * Wzorzec Projektowy Strategy * * (strategia) * * www.algorytm.org * *****************************************/ interface Pracowac { public function pracuj(); } interface Dojezdzac { public function dojezdzaj(); } interface WolnyCzas { public function spedzajWolnyCzas(); } class NaprawaSamochodow implements Pracowac { public function pracuj() { return 'Praca: naprawia samochody.'; }} class Leczenie implements Pracowac { public function pracuj() { return 'Praca: leczy ludzi.'; }} class RoznoszenieListow implements Pracowac { public function pracuj() { return 'Praca: Roznosi listy.'; }} class Samochod implements Dojezdzac { public function dojezdzaj() { return 'Dojazd: samochod.'; }} class Rower implements Dojezdzac { public function dojezdzaj() { return 'Dojazd: rower.'; }} class Silownia implements WolnyCzas { public function spedzajWolnyCzas() { return 'Wolny czas: siłka.'; }} class Czytaj implements WolnyCzas { public function spedzajWolnyCzas() { return 'Wolny czas: czytanie.'; }} class Pracownik { private $pracowac; private $dojezdzac; private $wolnyCzas; public function __construct($zawod) { echo $zawod . PHP_EOL; switch($zawod) { case 'mechanik': $this->pracowac = new NaprawaSamochodow(); $this->dojezdzac = new Samochod(); $this->wolnyCzas = new Silownia(); break; case 'lekarz': $this->pracowac = new Leczenie(); $this->dojezdzac = new Samochod(); $this->wolnyCzas = new Czytaj(); break; case 'listonosz': $this->pracowac = new RoznoszenieListow(); $this->dojezdzac = new Rower(); $this->wolnyCzas = new Silownia(); } } public function methods() { echo $this->pracowac->pracuj() . PHP_EOL; echo $this->dojezdzac->dojezdzaj() . PHP_EOL; echo $this->wolnyCzas->spedzajWolnyCzas() . PHP_EOL; } } $zawod = 'mechanik'; try{ $pracownik = new Pracownik($zawod); $pracownik->methods(); } catch (Exception $e) { return 'Nie ma takiego zawodu.'; } ?>