Strategy Pattern Demo
|
<?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"; }
?>
|
|
|
|
|
HTML code for linking to this page:
|