PHP5 State-Pattern
State-Pattern (Entwurfsmuster) in PHP5 am Beispiel eines Ein-/Ausschalters
interface State // Interface an welches sich die Konkreten Objekte halten muessen
{
public function nextState ( Context $_context );
}
class On implements State // Konkretes Objekt 1
{
public function nextState ( Context $_context )
{
$_context->setState(new Off());
return 'turn Off ['.__METHOD__.']';
}
}
class Off implements State // Konkretes Objekt 2
{
public function nextState ( Context $_context )
{
$_context->setState(new On());
return 'turn On ['.__METHOD__.']';
}
}
class Context // Context zur Speicherung des aktuellen State's
{
private $state = NULL;
function __construct ( State $_state )
{
$this->setState($_state);
}
/**
* Methode zum setzen eines neuen Status
* @param State $_state : Uebergabe des neuen Konkreten Objekts
*/
public function setState ( State $_state )
{
$this->state = $_state;
}
/**
* Weiterschalten zum naechsten State
*/
public function nextState ( )
{
return $this->state->nextState($this).'<br />';
}
}
// Test
$cContext = new Context(new Off());
echo $cContext->nextState();
echo $cContext->nextState();
echo $cContext->nextState();
echo $cContext->nextState();
echo $cContext->nextState();
/**
Ausgabe
turn On [Off::nextState]
turn Off [On::nextState]
turn On [Off::nextState]
turn Off [On::nextState]
turn On [Off::nextState]
*/
UML-Diagramm und weitere Informationen
http://de.wikipedia.org/wiki/Zustand_%28Entwurfsmuster%29