PHP/Design Patterns/Strategy Pattern
Strategy Pattern Demo
<source lang="html4strict">
<?php abstract class Product {
private $count; private $costStrategy; function __construct( $count, CostStrategy $strategy ) { $this->count = $count; $this->costStrategy = $strategy; } function cost() { return $this->costStrategy->cost( $this ); } function chargeType() { return $this->costStrategy->chargeType( ); } function getDuration() { return $this->count; }
} class ProductOne extends Product { } class ProductTwo extends Product { } abstract class CostStrategy {
abstract function cost( Product $lesson ); abstract function chargeType();
} class TimedCostStrategy extends CostStrategy {
function cost( Product $lesson ) { return ( $lesson->getDuration() * 5 ); } function chargeType() { return "hourly rate"; }
} class FixedCostStrategy extends CostStrategy {
function cost( Product $lesson ) { return 30; } function chargeType() { return "fixed rate"; }
} $lessons[] = new ProductTwo( 4, new TimedCostStrategy() ); $lessons[] = new ProductOne( 4, new FixedCostStrategy() ); foreach ( $lessons as $lesson ) {
print "lesson charge {$lesson->cost()}. "; print "Charge type: {$lesson->chargeType()}\n";
}
?>
</source>