Quantcast
Channel: The Code Collective » design patterns
Viewing all articles
Browse latest Browse all 7

Strategy Pattern

$
0
0
<?php /* ~~~~~~~~~~~~~ Car Repair Classes ~~~~~~~~~~~~~ */ abstract class CarRepair{ protected $_duration,$_cost_calculator; public function __construct($duration, CostCalculator $cost_calculator){ $this->_duration = $duration; $this->_cost_calculator = $cost_calculator; } public function get_cost(){ return $this->_cost_calculator->get_cost($this); } public function get_charge_type(){ return $this->_cost_calculator->get_charge_type($this); } public function get_duration(){ return $this->_duration; } } class OilChange extends CarRepair{ public function __construct($duration, CostCalculator $cost_calculator){ parent::__construct($duration,$cost_calculator); } //Overwrite Parent Method public function get_cost(){ //For overwrite example only - calcs should be kept in the CostCalculator Classes return $this->_cost_calculator->get_cost($this) * 2; } //Specific Method public function get_job_type(){ return 'Oil Change'; } } class TireRotation extends CarRepair{ public function __construct($duration, CostCalculator $cost_calculator){ parent::__construct($duration,$cost_calculator); } //Specific Method public function get_job_type(){ return 'Tire Rotation'; } } /* ~~~~~~~~~~~~~ Cost Calculators ~~~~~~~~~~~~~ */ abstract class CostCalculator{ abstract function get_cost(CarRepair $car_repair); abstract function get_charge_type(); } class HourlyCostCalculator extends CostCalculator{ public function get_cost(CarRepair $car_repair){ return($car_repair->get_duration() * 30);// $30 an hour } public function get_charge_type(){ return '$30 Hourly Rate'; } } class DiscountHourlyCostCalculator extends CostCalculator{ public function get_cost(CarRepair $car_repair){ return($car_repair->get_duration() * 20);// $20 an hour } public function get_charge_type(){ return '$20 Discount Hourly Rate'; } } //Print Example echo '~~~~~~~~~~~~~ Strategy Example: ~~~~~~~~~~~~~'; $jobs[] = new OilChange(4, new HourlyCostCalculator()); $jobs[] = new TireRotation(4, new DiscountHourlyCostCalculator()); foreach($jobs as $job){ echo $job->get_job_type() . ':<br>'; echo 'Job Charge: $' . $job->get_cost() . '<br>'; echo 'Charge Type: ' . $job->get_charge_type() . '<br><br>'; } ?>

Viewing all articles
Browse latest Browse all 7

Trending Articles