Prototype Pattern

<?php

class Cone{}
class PlainCone extends Cone{}
class WaffleCone extends Cone{}

class IceCream{}
class VanillaIceCream extends IceCream{
private $brand = 'Ben & Jerry's';//For something to look at in the clone
}
class ChocolateIceCream extends IceCream{}

class Topping{}
class Sprinkles extends Topping{}
class Nuts extends Topping{}

class DesertFactory{
private $_cone,$_ice_cream,$_topping;
public function __construct(Cone $cone,IceCream $ice_cream,Topping $topping){
$this->_cone = $cone;
$this->_ice_cream = $ice_cream;
$this->_topping = $topping;
}
public function get_cone(){
return clone $this->_cone;
}
public function get_ice_cream(){
return clone $this->_ice_cream;
}
public function get_topping(){
return clone $this->_topping;
}
}

echo '~~~~~~~~~~~~~ Prototype Example: ~~~~~~~~~~~~~';
$treat = new DesertFactory(new WaffleCone(),new VanillaIceCream(),new Sprinkles());
echo '<pre>';
print_r($treat);
echo '</pre><br><br>';

echo '<pre>';
print_r($treat->get_ice_cream());//Calling get_ice_cream() creates a clone
echo '</pre><br><br>';

?>

0 Comments

You must be logged in to post a comment.