Mega Code Archive

 
Categories / Php / Design Patterns
 

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"; } ?>