Created
March 12, 2012 00:56
-
-
Save tiagodavi/2018977 to your computer and use it in GitHub Desktop.
Design Pattern Strategy PHP
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#Armamentos/Armamento.php | |
<?php | |
//Qualquer tipo de arma deve implementar armamento | |
interface Armamento{ | |
//Deve obrigatoriamente poder ser utilizada | |
public function usar(); | |
} | |
#Armamentos/Espada.php | |
<?php | |
require_once 'Armamento.php'; //Interface Armamento | |
class Espada | |
implements Armamento{ | |
public function usar() | |
{ | |
echo 'Golpe com espada!'; //Tipo de golpe com espada | |
} | |
} | |
#Armamentos/Magia.php | |
<?php | |
require_once 'Armamento.php'; //Interface Armamento | |
class Magia | |
implements Armamento{ | |
private $combinacoes; //Podem haver combinações de magias | |
public function __construct($params = array()) | |
{ | |
foreach($params as $magia){ | |
$this->combinacoes[] = $magia; | |
} | |
} | |
public function usar() | |
{ | |
if(empty($this->combinacoes)){ | |
echo 'Golpe de magia negra!'; // a magia normal (sem combinações) é um golpe de magia negra | |
}else{ | |
//As combinações podem ser qualquer uma! Sinistro.. | |
foreach($this->combinacoes as $magia){ | |
echo $magia.'<br>'; | |
} | |
} | |
} | |
} | |
#Guerreiros/Guerreiro.php | |
<?php | |
abstract class Guerreiro{ | |
//Todo guerreiro tem um nome, tem um tipo e tem um armamento | |
private $nome, $tipo, $armamento; | |
//Seta propriedades | |
public function set_options($params = array()) | |
{ | |
//Percorre o array, se a propriedade existir..seta | |
foreach($params as $key => $value){ | |
if(property_exists($this,$key)){ | |
$this->$key = $value; | |
} | |
} | |
} | |
//Seta uma propriedade por vez | |
public function __set($propriedade,$valor) | |
{ | |
$this->$propriedade = $valor; | |
} | |
//Pega uma propriedade por vez | |
public function __get($propriedade) | |
{ | |
return $this->$propriedade; | |
} | |
//Todo guerreiro deve ser capaz de lutar :) | |
protected abstract function lutar(); | |
} | |
#Guerreiros/Rei.php | |
<?php | |
require_once 'Guerreiro.php'; // Rei é um guerreiro | |
require_once 'Armamentos/Espada.php'; // Tem espada | |
require_once 'Armamentos/Magia.php'; // Tem magia | |
class Rei | |
extends Guerreiro{ | |
public function __construct($params = array()) | |
{ | |
$this->set_options($params); | |
} | |
public function lutar() | |
{ | |
echo $this->__get('nome').'<br>'; | |
echo $this->__get('tipo').'<br>'; | |
echo $this->__get('armamento')->usar(); | |
} | |
} | |
#index.php | |
<?php | |
/* | |
Aqui teremos um combate entre o rei do Brasil e o rei dos EUA! | |
*/ | |
require_once 'Guerreiros/Rei.php'; //Adicionar o Rei | |
//O primeiro golpe vem do rei do Brasil | |
$rei_do_brasil = new Rei(array('nome' => 'Dilma','tipo' => 'Rei do Brasil', 'armamento' => new Espada)); | |
$rei_do_brasil->lutar(); | |
/* | |
Dilma | |
Rei do Brasil | |
Golpe com espada! | |
*/ | |
echo '<hr>'; | |
// O segundo golpe vem do rei dos EUA | |
// Podemos mudar o armamento do rei em tempo de execução graças ao Strategy :) | |
$rei_do_eua = new Rei(array('nome' => 'Obama','tipo' => 'Rei dos EUA','armamento' => new Magia)); | |
$rei_do_eua->lutar(); | |
/* | |
Obama | |
Rei dos EUA | |
Golpe de magia negra! | |
*/ | |
echo '<hr>'; | |
//Magias combinadas | |
$magias = array( | |
'BigBrother Brasil', | |
'Corrupção', | |
'Atraso na construção dos estádios', | |
'Briga no carnaval', | |
'Impostos altos', | |
'64% de aumento nas barcas SA' | |
); | |
//O rei do Brasil ficou furioso com a magia negra e agora decidiu combinar várias magias!! | |
//Alteramos também o armamento do rei do Brasil que antes era apenas uma espada.. | |
//E agora é tanta coisa ruim combinada que o rei dos EUA não resistiu.. :) | |
$rei_do_brasil->__set('armamento', new Magia($magias)); | |
$rei_do_brasil->lutar(); | |
/* | |
Dilma | |
Rei do Brasil | |
BigBrother Brasil | |
Corrupção | |
Atraso na construção dos estádios | |
Briga no carnaval | |
Impostos altos | |
64% de aumento nas barcas SA | |
*/ |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment