PHP/Design Patterns/Strategy Pattern

Материал из Web эксперт
Версия от 10:03, 26 мая 2010; Admin (обсуждение | вклад) (1 версия)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск

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>