/** |
* The Command abstraction. |
* In this case the implementation must return a result, |
* sometimes it only has side effects. |
*/ |
interface Validator |
{ |
/** |
* The method could have any parameters. |
* @param mixed |
* @return boolean |
*/ |
public function isValid( $value ); |
} |
|
/** |
* ConcreteCommand. |
*/ |
class MoreThanZeroValidator implements Validator |
{ |
public function isValid( $value ) |
{ |
return $value > 0; |
} |
} |
|
/** |
* ConcreteCommand. |
*/ |
class EvenValidator implements Validator |
{ |
public function isValid( $value ) |
{ |
return $value % 2 == 0; |
} |
} |
|
/** |
* The Invoker. An implementation could store more than one |
* Validator if needed. |
*/ |
class ArrayProcessor |
{ |
protected $_rule ; |
|
public function __construct (Validator $rule ) |
{ |
$this ->_rule = $rule ; |
} |
|
public function process( array $numbers ) |
{ |
foreach ( $numbers as $n ) { |
if ( $this ->_rule->IsValid( $n )) { |
echo $n , "\n" ; |
} |
} |
} |
} |
|
// Client code |
$processor = new ArrayProcessor( new EvenValidator()); |
$processor ->process( array (1, 20, 18, 5, 0, 31, 42)); |