Prototype Pattern


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>';
echo '</pre><br><br>';

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



You must be logged in to post a comment.