Switch to full style
:read: Start PHP with us. Includes topics to help you in php
Post a reply

Strategy Pattern

Mon Oct 27, 2008 12:22 pm

Code:

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


?>




Post a reply
  Related Posts  to : Strategy Pattern
 DAO Pattern     -  
 DAO design pattern     -  
 about dao design pattern     -  
 Factory pattern     -  
 The Singleton Pattern     -  
 Singleton Pattern Demo     -  
 Replacing a Pattern with a Found String     -  

Topic Tags

PHP OOP