Anos atrás eu criei algumas classes para representar o jogo Splinter Cell através de objetos e com um uso de interfaces para mostrar tipos sendo compartilhados. Basicamente, é a representação de elementos (personagens e equipamentos) do jogo Splinter Cell da ubisoft através do paradigma da orientação a objetos.
Por exemplo, Sam Fisher (o protagonista do jogo) é composto por nightvision googles (óculos e visão noturna) com injeção de dependência e implementa a interface que define um agente especial.
<?php
namespace SplinterCellOOP;
use SplinterCellOOP\ThirdEchelonAgent;
use SplinterCellOOP\FourthEchelonAgent;
use SplinterCellOOP\Goggles;
/**
*
* @author Raphael da Silva
*
*/
class SamFisher implements FourthEchelonAgent
{
private $goggles;
public function __construct(
Goggles $goggles
){
$this->goggles = $goggles;
}
public function actStealth()
{
$this->goggles->enable();
}
}
Ao implementar a inteface FourthEchelonAgent
, o personagem também implementa a interface ThirdEchelonAgent
, pois a primeira é uma extensão da segunda, já que na história do jogo, a FourthEchelon é a sucessora da ThirdEchelon.
<?php
namespace SplinterCellOOP;
use SplinterCellOOP\ThirdEchelonAgent;
/**
*
* @author Raphael da Silva
*
*/
interface FourthEchelonAgent extends ThirdEchelonAgent
{
}
Além de Sam Fisher, outros agentes podem implementar a mesma interface, pois fazem parte da mesma organização (sendo do mesmo tipo).
<?php
namespace SplinterCellOOP;
use SplinterCellOOP\FourthEchelonAgent;
use SplinterCellOOP\Weapon;
use SplinterCellOOP\Goggles;
/**
*
* @author Raphael da Silva
*
*/
class IssacBriggs implements FourthEchelonAgent
{
private $weapon;
private $goggles;
public function __construct(
Weapon $weapon,
Goggles $goggles
){
$this->weapon = $weapon;
$this->goggles = $goggles;
}
public function actStealth()
{
$this->goggles->enable();
$this->weapon->use();
}
}
É isso! Segue o link para todo o código no repositório.
Top comments (0)