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.';
}
?>

