Strategy Pattern Demo : Strategy Pattern « Design Patterns « PHP






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


?>

           
       








Related examples in the same category