Skip to content

Instantly share code, notes, and snippets.

@stephandesouza
Forked from giovanisilveira/factory.php
Last active August 29, 2015 14:02
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save stephandesouza/57437e09fbab3a6b9e0a to your computer and use it in GitHub Desktop.
Save stephandesouza/57437e09fbab3a6b9e0a to your computer and use it in GitHub Desktop.
<?php
interface Atendimento
{
const SUPORTE = 1;
const FINANCEIRO = 2;
const ADMINISTRATIVO = 3;
public function encerrar();
}
class Suporte implements Atendimento
{
public function encerrar()
{
return "Encerrar Suporte";
}
}
class Financeiro implements Atendimento
{
public function encerrar()
{
return "Encerrar Financeiro";
}
}
class Administrativo implements Atendimento
{
public function encerrar()
{
return "Encerrar Administrativo";
}
}
class AtendimentoFactory
{
public static $atendimentoClass = [
1 => 'Suporte',
'Financeiro',
'Administrativo'
];
public static function createAtendimentoPorTipo($tipo)
{
if(!isset(self::$atendimentoClass[$tipo])) {
throw new \OutOfBoundsException('Tipo de atendimento não encontrado.');
}
return new self::$atendimentoClass[$tipo];
}
}
@stephandesouza
Copy link
Author

Foi solicitado o não uso de Switch..

Nesse formato você pode saber qual a classe responsável usando AtendimentoFactory::$atendimentoClass

Complementei colocando um Exception caso o cara informe um tipo não esperado

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment