<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>One man's voice &#187; PHP Design Patterns</title>
	<atom:link href="http://www.robert-gonzalez.com/category/web-technologies/php/php-design-patterns/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.robert-gonzalez.com</link>
	<description>Thoughts, rants and commentary from a husband, father of five and professional web geek</description>
	<lastBuildDate>Tue, 08 Jun 2010 23:22:36 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Code monkey like design patterns lots</title>
		<link>http://www.robert-gonzalez.com/2008/05/29/code-monkey-like-design-patterns-lots/</link>
		<comments>http://www.robert-gonzalez.com/2008/05/29/code-monkey-like-design-patterns-lots/#comments</comments>
		<pubDate>Fri, 30 May 2008 04:37:52 +0000</pubDate>
		<dc:creator>Robert Gonzalez</dc:creator>
				<category><![CDATA[Geek Stuff]]></category>
		<category><![CDATA[PHP Design Patterns]]></category>
		<category><![CDATA[Coding]]></category>
		<category><![CDATA[Design patterns]]></category>
		<category><![CDATA[Monkeys]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.robert-gonzalez.com/?p=589</guid>
		<description><![CDATA[I was thinking today that though I carry the title of Web Developer around with me wherever I go I have not been developing for the web much the last few months. Come to think of it, I cannot say that I have developed anything for the web in about five months or so.
Don't get [...]]]></description>
			<content:encoded><![CDATA[<p>I was thinking today that though I carry the title of Web Developer around with me wherever I go I have not been developing for the web much the last few months. Come to think of it, I cannot say that I have developed anything for the web in about five months or so.</p>
<p>Don't get me wrong. I have been coding PHP like a mad penguin with 20 hands and an incredible itch at the tip of his fingers. Its just that the code I have been writing has been either framework code that drives web apps or CLI code that will be used for integration projects from the command line or cron.</p>
<p>And I absolutely love what I am doing. I have been employing design patters almost as though they came straight from a book. Without even knowing I was doing that.</p>
<p>And it made perfect sense to do it. Little modular classes that are built of maybe two methods and a property each that totally allow for expansion later just by adding the controller and the model. You just gotta love it.</p>
<p>And because I have had the opportunity to do so, I have been using vi(m) quite a bit more than I have in the past. In fact, today I used nothing else. And I was totally thrilled to use it.</p>
<p>I felt faster and way more in control without having to touch my mouse. And I was able to code, shell out, process SVN commits, file searches, CLI stuff... everything I needed to do without ever leaving my editor and without ever touching my mouse. How awesome is that?</p>
<p>I think my zeal for the type of coding is that I felt like a programmer today. Not a script kiddie, not a PHP n00b, but a programmer. A guy who writes code then implements it and instantiates it at the CLI to watch (you ready for this?) absolutely nothing come to the screen - because that is how we want it to work.</p>
<p>Yeah, I love being a geek. And it doesn't take much to make me happy as a geek. A sweet little editor, a freaking rad OS and a great programming language like PHP. Oh yes, color me happy. And color me geek.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.robert-gonzalez.com/2008/05/29/code-monkey-like-design-patterns-lots/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Chapter 4: The factory pattern</title>
		<link>http://www.robert-gonzalez.com/2007/10/07/chapter-4-the-factory-pattern/</link>
		<comments>http://www.robert-gonzalez.com/2007/10/07/chapter-4-the-factory-pattern/#comments</comments>
		<pubDate>Mon, 08 Oct 2007 02:50:53 +0000</pubDate>
		<dc:creator>Robert Gonzalez</dc:creator>
				<category><![CDATA[Geek Stuff]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[PHP Design Patterns]]></category>
		<category><![CDATA[Web Development]]></category>

		<guid isPermaLink="false">http://www.robert-gonzalez.com/2007/10/07/chapter-4-the-factory-pattern/</guid>
		<description><![CDATA[Again, a little later than I would have liked, but here is the translation of the first run factory pattern from the Head First Design Patterns book:

&#60;?php
/*
class SimplePizzaFactory {
	public function createPizza($type) {
		$pizza = null;
&#160;
		if ($type == 'cheese') {
			$pizza = new CheesePizza();
		} elseif ($type == 'pepperoni') {
			$pizza = new PepperoniPizza();
		} elseif ($type == 'clam') {
			$pizza = [...]]]></description>
			<content:encoded><![CDATA[<p>Again, a little later than I would have liked, but here is the translation of the first run factory pattern from the Head First Design Patterns book:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #666666; font-style: italic;">/*
class SimplePizzaFactory {
	public function createPizza($type) {
		$pizza = null;
&nbsp;
		if ($type == 'cheese') {
			$pizza = new CheesePizza();
		} elseif ($type == 'pepperoni') {
			$pizza = new PepperoniPizza();
		} elseif ($type == 'clam') {
			$pizza = new ClamPizza();
		} elseif ($type == 'veggie') {
			$pizza = new VeggiePizza();
		}
&nbsp;
		return $pizza;
	}
}
*/</span>
abstract <span style="color: #000000; font-weight: bold;">class</span> PizzaStore <span style="color: #009900;">&#123;</span>
	<span style="color: #666666; font-style: italic;">//public $factory;</span>
&nbsp;
	<span style="color: #666666; font-style: italic;">//public function __construct(SimplePizzaFactory $factory) {</span>
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> __construct<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #666666; font-style: italic;">//$this-&gt;factory = $factory;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> orderPizza<span style="color: #009900;">&#40;</span><span style="color: #000088;">$type</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000088;">$pizza</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">createPizza</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$type</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #000088;">$pizza</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">prepare</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #000088;">$pizza</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">bake</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #000088;">$pizza</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">cut</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #000088;">$pizza</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">box</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #b1b100;">return</span> <span style="color: #000088;">$pizza</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	abstract protected <span style="color: #000000; font-weight: bold;">function</span> createPizza<span style="color: #009900;">&#40;</span><span style="color: #000088;">$type</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">class</span> NYPizzaStore <span style="color: #000000; font-weight: bold;">extends</span> PizzaStore <span style="color: #009900;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> createPizza<span style="color: #009900;">&#40;</span><span style="color: #000088;">$item</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$item</span> <span style="color: #339933;">==</span> <span style="color: #0000ff;">'cheese'</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			<span style="color: #b1b100;">return</span> <span style="color: #000000; font-weight: bold;">new</span> NYStyleCheesePizza<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">elseif</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$item</span> <span style="color: #339933;">==</span> <span style="color: #0000ff;">'pepperoni'</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			<span style="color: #b1b100;">return</span> <span style="color: #000000; font-weight: bold;">new</span> NYStylePepperoniPizza<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">elseif</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$item</span> <span style="color: #339933;">==</span> <span style="color: #0000ff;">'clam'</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			<span style="color: #b1b100;">return</span> <span style="color: #000000; font-weight: bold;">new</span> NYStyleClamPizza<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">elseif</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$item</span> <span style="color: #339933;">==</span> <span style="color: #0000ff;">'veggie'</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			<span style="color: #b1b100;">return</span> <span style="color: #000000; font-weight: bold;">new</span> NYStyleVeggiePizza<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
			<span style="color: #b1b100;">return</span> <span style="color: #009900; font-weight: bold;">null</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">class</span> CAPizzaStore <span style="color: #000000; font-weight: bold;">extends</span> PizzaStore <span style="color: #009900;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> createPizza<span style="color: #009900;">&#40;</span><span style="color: #000088;">$item</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$item</span> <span style="color: #339933;">==</span> <span style="color: #0000ff;">'cheese'</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			<span style="color: #b1b100;">return</span> <span style="color: #000000; font-weight: bold;">new</span> CAStyleCheesePizza<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">elseif</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$item</span> <span style="color: #339933;">==</span> <span style="color: #0000ff;">'pepperoni'</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			<span style="color: #b1b100;">return</span> <span style="color: #000000; font-weight: bold;">new</span> CAStylePepperoniPizza<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">elseif</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$item</span> <span style="color: #339933;">==</span> <span style="color: #0000ff;">'clam'</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			<span style="color: #b1b100;">return</span> <span style="color: #000000; font-weight: bold;">new</span> CAStyleClamPizza<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">elseif</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$item</span> <span style="color: #339933;">==</span> <span style="color: #0000ff;">'veggie'</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			<span style="color: #b1b100;">return</span> <span style="color: #000000; font-weight: bold;">new</span> CAStyleVeggiePizza<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
			<span style="color: #b1b100;">return</span> <span style="color: #009900; font-weight: bold;">null</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">class</span> ChicagoPizzaStore <span style="color: #000000; font-weight: bold;">extends</span> PizzaStore <span style="color: #009900;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> createPizza<span style="color: #009900;">&#40;</span><span style="color: #000088;">$item</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$item</span> <span style="color: #339933;">==</span> <span style="color: #0000ff;">'cheese'</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			<span style="color: #b1b100;">return</span> <span style="color: #000000; font-weight: bold;">new</span> ChicagoStyleCheesePizza<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">elseif</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$item</span> <span style="color: #339933;">==</span> <span style="color: #0000ff;">'pepperoni'</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			<span style="color: #b1b100;">return</span> <span style="color: #000000; font-weight: bold;">new</span> ChicagoStylePepperoniPizza<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">elseif</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$item</span> <span style="color: #339933;">==</span> <span style="color: #0000ff;">'clam'</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			<span style="color: #b1b100;">return</span> <span style="color: #000000; font-weight: bold;">new</span> ChicagoStyleClamPizza<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">elseif</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$item</span> <span style="color: #339933;">==</span> <span style="color: #0000ff;">'veggie'</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			<span style="color: #b1b100;">return</span> <span style="color: #000000; font-weight: bold;">new</span> ChicagoStyleVeggiePizza<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
			<span style="color: #b1b100;">return</span> <span style="color: #009900; font-weight: bold;">null</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
abstract <span style="color: #000000; font-weight: bold;">class</span> Pizza <span style="color: #009900;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000088;">$name</span><span style="color: #339933;">;</span>
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000088;">$dough</span><span style="color: #339933;">;</span>
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000088;">$sauce</span><span style="color: #339933;">;</span>
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000088;">$toppings</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> prepare<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'&lt;p&gt;Preparing '</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">name</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">'&lt;br /&gt;'</span><span style="color: #339933;">;</span>
		<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'&lt;/p&gt;&lt;p&gt;Tossing dough ...&lt;/p&gt;'</span><span style="color: #339933;">;</span>
		<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'&lt;p&gt;Adding sauce ...&lt;/p&gt;'</span><span style="color: #339933;">;</span>
		<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'&lt;p&gt;Adding toppings: '</span><span style="color: #339933;">;</span>
		<span style="color: #b1b100;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$i</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span> <span style="color: #000088;">$i</span> <span style="color: #339933;">&lt;</span> <span style="color: #990000;">count</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">toppings</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #000088;">$i</span><span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">' '</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">toppings</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$i</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
		<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'&lt;/ count&gt;&lt;/p&gt;'</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> bake<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'&lt;p&gt;Bake for 25 minutes at 350&lt;/p&gt;'</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> cut<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'&lt;p&gt;Cutting the pizza into diagonal slices&lt;/p&gt;'</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> box<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'&lt;p&gt;Place pizza in official PizzaStore box&lt;/p&gt;'</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> getName<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #b1b100;">return</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">name</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">class</span> NYStyleCheesePizza <span style="color: #000000; font-weight: bold;">extends</span> Pizza <span style="color: #009900;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> __construct<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">name</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'NY Style Sauce and Cheese Pizza'</span><span style="color: #339933;">;</span>
		<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">dough</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'Thin Crust Dough'</span><span style="color: #339933;">;</span>
		<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">sauce</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'Marinara Sauce'</span><span style="color: #339933;">;</span>
		<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">toppings</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'Grated Reggiano Cheese'</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">class</span> ChicagoStyleCheesePizza <span style="color: #000000; font-weight: bold;">extends</span> Pizza <span style="color: #009900;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> __construct<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">name</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'Chicago Style Deep Dish Cheese Pizza'</span><span style="color: #339933;">;</span>
		<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">dough</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'Extra Thick Crust Dough'</span><span style="color: #339933;">;</span>
		<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">sauce</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'Plum Tomato Sauce'</span><span style="color: #339933;">;</span>
		<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">toppings</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'Shredded Mozarella Cheese'</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> cut<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'&lt;p&gt;Cutting the pizza into square slices&lt;/p&gt;'</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">class</span> PizzaTestDrive <span style="color: #009900;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000088;">$NYStore</span><span style="color: #339933;">;</span>
	<span style="color: #000000; font-weight: bold;">Public</span> <span style="color: #000088;">$ChicagoStore</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> __construct<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">NYStore</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> NYPizzaStore<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">ChicagoStore</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> ChicagoPizzaStore<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #000088;">$pizza</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">NYStore</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">orderPizza</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'cheese'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'&lt;p&gt;Ethan ordered a '</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$pizza</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getName</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">'&lt;/p&gt;'</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #000088;">$pizza</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">ChicagoStore</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">orderPizza</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'cheese'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'&lt;p&gt;Joel ordered a '</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$pizza</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getName</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">'&lt;/p&gt;'</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000088;">$ptd</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> PizzaTestDrive<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

<p>Output:<br />
<code>Preparing NY Style Sauce and Cheese Pizza<br />
Tossing dough ...<br />
Adding sauce ...<br />
Adding toppings: Grated Reggiano Cheese<br />
Bake for 25 minutes at 350<br />
Cutting the pizza into diagonal slices<br />
Place pizza in official PizzaStore box<br />
Ethan ordered a NY Style Sauce and Cheese Pizza</code></p>
<p><code>Preparing Chicago Style Deep Dish Cheese Pizza<br />
Tossing dough ...<br />
Adding sauce ...<br />
Adding toppings: Shredded Mozarella Cheese<br />
Bake for 25 minutes at 350<br />
Cutting the pizza into square slices<br />
Place pizza in official PizzaStore box<br />
Joel ordered a Chicago Style Deep Dish Cheese Pizza</code></p>
]]></content:encoded>
			<wfw:commentRss>http://www.robert-gonzalez.com/2007/10/07/chapter-4-the-factory-pattern/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Chapter 3: The decorator pattern</title>
		<link>http://www.robert-gonzalez.com/2007/08/22/chapter-3-the-decorator-pattern/</link>
		<comments>http://www.robert-gonzalez.com/2007/08/22/chapter-3-the-decorator-pattern/#comments</comments>
		<pubDate>Wed, 22 Aug 2007 15:46:46 +0000</pubDate>
		<dc:creator>Robert Gonzalez</dc:creator>
				<category><![CDATA[Geek Stuff]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[PHP Design Patterns]]></category>
		<category><![CDATA[Web Development]]></category>

		<guid isPermaLink="false">http://www.robert-gonzalez.com/2007/08/22/the-decorator-pattern/</guid>
		<description><![CDATA[I have been meaning to put this out for a bit now. Without further ado, I welcome to you... the decorator pattern

&#60;?php
abstract class Beverage &#123;
	public $description = 'Unknown Beverage';
&#160;
	public function getDescription&#40;&#41; &#123;
		return $this-&#62;description;
	&#125;
&#160;
	abstract public function cost&#40;&#41;;
&#125;
&#160;
// Note: This abstract class is totally unnecessary, but 
// I am leaving it in with the abstraction of the [...]]]></description>
			<content:encoded><![CDATA[<p>I have been meaning to put this out for a bit now. Without further ado, I welcome to you... the decorator pattern</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
abstract <span style="color: #000000; font-weight: bold;">class</span> Beverage <span style="color: #009900;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000088;">$description</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'Unknown Beverage'</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> getDescription<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #b1b100;">return</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">description</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	abstract <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> cost<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// Note: This abstract class is totally unnecessary, but </span>
<span style="color: #666666; font-style: italic;">// I am leaving it in with the abstraction of the </span>
<span style="color: #666666; font-style: italic;">// getDescription method commented out as in PHP it is not </span>
<span style="color: #666666; font-style: italic;">// possible to abstract a method that is already defined</span>
abstract <span style="color: #000000; font-weight: bold;">class</span> CondimentDecorator <span style="color: #000000; font-weight: bold;">extends</span> Beverage <span style="color: #009900;">&#123;</span>
	<span style="color: #666666; font-style: italic;">//abstract public function getDescription();</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">class</span> Espresso <span style="color: #000000; font-weight: bold;">extends</span> Beverage <span style="color: #009900;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> __construct<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">description</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'Espresso'</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> cost<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #b1b100;">return</span> <span style="color:#800080;">1.99</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">class</span> HouseBlend <span style="color: #000000; font-weight: bold;">extends</span> Beverage <span style="color: #009900;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> __construct<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">description</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'House Blend Coffee'</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> cost<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #b1b100;">return</span> <span style="color:#800080;">0.89</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">class</span> DarkRoast <span style="color: #000000; font-weight: bold;">extends</span> Beverage <span style="color: #009900;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> __construct<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">description</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'Dark Roast'</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> cost<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #b1b100;">return</span> <span style="color:#800080;">0.99</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">class</span> Decaf <span style="color: #000000; font-weight: bold;">extends</span> Beverage <span style="color: #009900;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> __construct<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">description</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'Decaf Coffee'</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> cost<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #b1b100;">return</span> <span style="color:#800080;">1.05</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">class</span> Mocha <span style="color: #000000; font-weight: bold;">extends</span> CondimentDecorator <span style="color: #009900;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000088;">$beverage</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> __construct<span style="color: #009900;">&#40;</span>Beverage <span style="color: #000088;">$beverage</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">beverage</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$beverage</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> getDescription<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #b1b100;">return</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">beverage</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getDescription</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">', Mocha'</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> cost<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #b1b100;">return</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">beverage</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">cost</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> <span style="color:#800080;">0.20</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">class</span> SteamedMilk <span style="color: #000000; font-weight: bold;">extends</span> CondimentDecorator <span style="color: #009900;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000088;">$beverage</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> __construct<span style="color: #009900;">&#40;</span>Beverage <span style="color: #000088;">$beverage</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">beverage</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$beverage</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> getDescription<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #b1b100;">return</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">beverage</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getDescription</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">', Steamed Milk'</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> cost<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #b1b100;">return</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">beverage</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">cost</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> <span style="color:#800080;">0.10</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">class</span> Soy <span style="color: #000000; font-weight: bold;">extends</span> CondimentDecorator <span style="color: #009900;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000088;">$beverage</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> __construct<span style="color: #009900;">&#40;</span>Beverage <span style="color: #000088;">$beverage</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">beverage</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$beverage</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> getDescription<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #b1b100;">return</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">beverage</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getDescription</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">', Soy'</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> cost<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #b1b100;">return</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">beverage</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">cost</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> <span style="color:#800080;">0.15</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">class</span> Whip <span style="color: #000000; font-weight: bold;">extends</span> CondimentDecorator <span style="color: #009900;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000088;">$beverage</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> __construct<span style="color: #009900;">&#40;</span>Beverage <span style="color: #000088;">$beverage</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">beverage</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$beverage</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> getDescription<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #b1b100;">return</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">beverage</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getDescription</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">', Whip'</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> cost<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #b1b100;">return</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">beverage</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">cost</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> <span style="color:#800080;">0.10</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">class</span> StarBuzzCoffee <span style="color: #009900;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> __construct<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000088;">$beverage</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Espresso<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #b1b100;">echo</span> <span style="color: #000088;">$beverage</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getDescription</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">' $'</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$beverage</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">cost</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">'&lt;br /&gt;'</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #000088;">$beverage2</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> DarkRoast<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #000088;">$beverage2</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Mocha<span style="color: #009900;">&#40;</span><span style="color: #000088;">$beverage2</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #000088;">$beverage2</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Mocha<span style="color: #009900;">&#40;</span><span style="color: #000088;">$beverage2</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #000088;">$beverage2</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Whip<span style="color: #009900;">&#40;</span><span style="color: #000088;">$beverage2</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #b1b100;">echo</span> <span style="color: #000088;">$beverage2</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getDescription</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">' $'</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$beverage2</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">cost</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">'&lt;br /&gt;'</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #000088;">$beverage3</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> HouseBlend<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #000088;">$beverage3</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Soy<span style="color: #009900;">&#40;</span><span style="color: #000088;">$beverage3</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #000088;">$beverage3</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Mocha<span style="color: #009900;">&#40;</span><span style="color: #000088;">$beverage3</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #000088;">$beverage3</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Whip<span style="color: #009900;">&#40;</span><span style="color: #000088;">$beverage3</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #b1b100;">echo</span> <span style="color: #000088;">$beverage3</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getDescription</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">' $'</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$beverage3</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">cost</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">'&lt;br /&gt;'</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000088;">$coffee</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> StarBuzzCoffee<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Output:<br />
<code>Espresso $1.99<br />
Dark Roast, Mocha, Mocha, Whip $1.49<br />
House Blend Coffee, Soy, Mocha, Whip $1.34</code></p>
]]></content:encoded>
			<wfw:commentRss>http://www.robert-gonzalez.com/2007/08/22/chapter-3-the-decorator-pattern/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Chris Corbyn&#8217;s Controller and View tutorial</title>
		<link>http://www.robert-gonzalez.com/2007/08/13/chris-corbyns-controller-and-view-tutorial/</link>
		<comments>http://www.robert-gonzalez.com/2007/08/13/chris-corbyns-controller-and-view-tutorial/#comments</comments>
		<pubDate>Mon, 13 Aug 2007 16:53:11 +0000</pubDate>
		<dc:creator>Robert Gonzalez</dc:creator>
				<category><![CDATA[Geek Stuff]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[PHP Design Patterns]]></category>
		<category><![CDATA[Web Development]]></category>

		<guid isPermaLink="false">http://www.robert-gonzalez.com/2007/08/13/chris-corbyns-controller-and-view-tutorial/</guid>
		<description><![CDATA[Ok, so every now and again a tutorial comes along that inspires learning on the first run of reading it. For example, Pádraic Brady has ]]></description>
			<content:encoded><![CDATA[<p>Ok, so every now and again a tutorial comes along that inspires learning on the first run of reading it. For example, <a href="http://blog.astrumfutura.com/" title="Pádraic Brady's blog">Pádraic Brady</a> has <a href="http://forums.devnetwork.net/viewtopic.php?t=38810" title="A challenge and response tutorial"">an excellent tutorial on challenge and response in the PHPDN forums</a>. Last night I ran into <a href="http://www.w3style.co.uk/a-lightweight-and-flexible-front-controller-for-php-5" title="Learn PHP controllers and views in about five minutes">one such tutorial</a> by <a href="http://www.w3style.co.uk/" title="Chris Corbyn's blog">Chris Corbyn</a>, author of the freaking outright awesome <a href="http://www.swiftmailer.org/" title="Swiftmailer: the best PHP mailing application in the universe">Swiftmailer</a> library.</p>
<p>Chris has put together a very easy to learn instruction on using controllers and views, and it is worth a read. I followed the tutorial this morning and put together all the code he used in his examples. The code works right out of the box. And it helps you learn as well.</p>
<p>If you have a few minutes and an inclination to learn how controllers operate in conjunction with views, read the tutorial, implement the code and watch the magic happen. You will be pleasantly amazed.</p>
<p>Thanks Chris for a great tutorial.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.robert-gonzalez.com/2007/08/13/chris-corbyns-controller-and-view-tutorial/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Chapter 2: The Observer Pattern</title>
		<link>http://www.robert-gonzalez.com/2007/08/05/chapter-2-the-observer-pattern/</link>
		<comments>http://www.robert-gonzalez.com/2007/08/05/chapter-2-the-observer-pattern/#comments</comments>
		<pubDate>Mon, 06 Aug 2007 04:58:12 +0000</pubDate>
		<dc:creator>Robert Gonzalez</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[PHP Design Patterns]]></category>
		<category><![CDATA[Web Development]]></category>

		<guid isPermaLink="false">http://www.robert-gonzalez.com/2007/08/05/chapter-2-the-observer-pattern/</guid>
		<description><![CDATA[Here is the first stage of the Observer pattern, chapter 2 of Head First Design Patterns:
(On a side note, I hate the way Wordpress makes your post into what it thinks it should be. Wouldn't you think that if I out text inside of a code that I wouldn't want it auto-p'ed?)

&#60; ?php
// All class [...]]]></description>
			<content:encoded><![CDATA[<p>Here is the first stage of the Observer pattern, chapter 2 of Head First Design Patterns:<br />
(On a side note, I hate the way Wordpress makes your post into what it thinks it should be. Wouldn't you think that if I out text inside of a <code>code</code> that I wouldn't want it auto-p'ed?)</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #339933;">&lt;</span> ?php
<span style="color: #666666; font-style: italic;">// All class names are preprended with Sample_ to prevent namespace clashing</span>
<span style="color: #666666; font-style: italic;">// Need subject, concrete subject, observer and concrete observer</span>
<span style="color: #000000; font-weight: bold;">interface</span> Sample_Subject
<span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> registerObserver<span style="color: #009900;">&#40;</span>Sample_Observer <span style="color: #000088;">$o</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> removeObserver<span style="color: #009900;">&#40;</span>Sample_Observer <span style="color: #000088;">$o</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> notifyObservers<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">interface</span> Sample_Observer
<span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> update<span style="color: #009900;">&#40;</span><span style="color: #000088;">$temp</span><span style="color: #339933;">,</span> <span style="color: #000088;">$humidity</span><span style="color: #339933;">,</span> <span style="color: #000088;">$pressure</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">interface</span> Sample_Display_Element
<span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> display<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">class</span> Sample_Weather_Data implements Sample_Subject
<span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000088;">$observers</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// In the example, this is object-cast, then built in the constructor</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000088;">$temperature</span> <span style="color: #339933;">=</span> <span style="color:#800080;">0.00</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// This casts as float</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000088;">$humidity</span> <span style="color: #339933;">=</span> <span style="color:#800080;">0.00</span><span style="color: #339933;">;</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000088;">$pressure</span> <span style="color: #339933;">=</span> <span style="color:#800080;">0.00</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> __construct<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">observers</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> registerObserver<span style="color: #009900;">&#40;</span>Sample_Observer <span style="color: #000088;">$o</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">observers</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$o</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> removeObserver<span style="color: #009900;">&#40;</span>Sample_Observer <span style="color: #000088;">$o</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #666666; font-style: italic;">// This has to be done totally different</span>
        <span style="color: #666666; font-style: italic;">// Eventhough there is an ArrayObject in the SPL</span>
        <span style="color: #666666; font-style: italic;">// It doesn't work like Java's</span>
        <span style="color: #b1b100;">foreach</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">observers</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$k</span> <span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$v</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$v</span> <span style="color: #339933;">===</span> <span style="color: #000088;">$o</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                <span style="color: #990000;">unset</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">observers</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$k</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #009900;">&#125;</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> notifyObservers<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$i</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span> <span style="color: #000088;">$i</span> <span style="color: #339933;">&lt;</span> <span style="color: #990000;">count</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">observers</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #000088;">$i</span><span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">observers</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$i</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">update</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">temperature</span><span style="color: #339933;">,</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">humidity</span><span style="color: #339933;">,</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">pressure</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> measurementsChanged<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">notifyObservers</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #666666; font-style: italic;">// The book uses temperature, but it needs to be temp for PHP</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> setMeasurements<span style="color: #009900;">&#40;</span><span style="color: #000088;">$temp</span><span style="color: #339933;">,</span> <span style="color: #000088;">$humidity</span><span style="color: #339933;">,</span> <span style="color: #000088;">$pressure</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">temperature</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>float<span style="color: #009900;">&#41;</span> <span style="color: #000088;">$temp</span><span style="color: #339933;">;</span>
        <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">humidity</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>float<span style="color: #009900;">&#41;</span> <span style="color: #000088;">$humidity</span><span style="color: #339933;">;</span>
        <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">pressure</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>float<span style="color: #009900;">&#41;</span> <span style="color: #000088;">$pressure</span><span style="color: #339933;">;</span>
        <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">measurementsChanged</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">class</span> Sample_Current_Conditions_Display implements Sample_Observer<span style="color: #339933;">,</span> Sample_Display_Element
<span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000088;">$temperature</span><span style="color: #339933;">;</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000088;">$humidity</span><span style="color: #339933;">;</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000088;">$weatherData</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> __construct<span style="color: #009900;">&#40;</span>Sample_Weather_Data <span style="color: #000088;">$weatherData</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">weatherData</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$weatherData</span><span style="color: #339933;">;</span>
        <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">weatherData</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">registerObserver</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> update<span style="color: #009900;">&#40;</span><span style="color: #000088;">$temperature</span><span style="color: #339933;">,</span> <span style="color: #000088;">$humidity</span><span style="color: #339933;">,</span> <span style="color: #000088;">$pressure</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">temperature</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>float<span style="color: #009900;">&#41;</span> <span style="color: #000088;">$temperature</span><span style="color: #339933;">;</span>
        <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">humidity</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>float<span style="color: #009900;">&#41;</span> <span style="color: #000088;">$humidity</span><span style="color: #339933;">;</span>
        <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">display</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> display<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;&lt;p&gt;Current conditions: &quot;</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">temperature</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">&quot;F degrees and &quot;</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">humidity</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">&quot;% humidity&lt;/p&gt;&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">class</span> Sample_Statistics_Display implements Sample_Observer<span style="color: #339933;">,</span> Sample_Display_Element
<span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000088;">$maxTemp</span> <span style="color: #339933;">=</span> <span style="color:#800080;">0.0</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// Can't float and add F or it types to string</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000088;">$minTemp</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">200</span><span style="color: #339933;">;</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000088;">$tempSum</span> <span style="color: #339933;">=</span> <span style="color:#800080;">0.0</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// Again, no F</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000088;">$numReadings</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000088;">$weatherData</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> __construct<span style="color: #009900;">&#40;</span>Sample_Weather_Data <span style="color: #000088;">$weatherData</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">weatherData</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$weatherData</span><span style="color: #339933;">;</span>
        <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">weatherData</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">registerObserver</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> update<span style="color: #009900;">&#40;</span><span style="color: #000088;">$temp</span><span style="color: #339933;">,</span> <span style="color: #000088;">$humidity</span><span style="color: #339933;">,</span> <span style="color: #000088;">$pressure</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">tempSum</span> <span style="color: #339933;">+=</span> <span style="color: #000088;">$temp</span><span style="color: #339933;">;</span>
        <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">numReadings</span><span style="color: #339933;">++;</span>
&nbsp;
        <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$temp</span> <span style="color: #339933;">&gt;</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">maxTemp</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">maxTemp</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$temp</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
&nbsp;
        <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$temp</span> <span style="color: #339933;">&lt;</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">minTemp</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">minTemp</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$temp</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
&nbsp;
        <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">display</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> display<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;&lt;p&gt;Avg/Max/Min temperature = &quot;</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">tempSum</span> <span style="color: #339933;">/</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">numReadings</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">&quot;/&quot;</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">maxTemp</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">&quot;/&quot;</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">minTemp</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">&quot;&lt;/p&gt;&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">class</span> Sample_Forecast_Display implements Sample_Observer<span style="color: #339933;">,</span> Sample_Display_Element
<span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000088;">$currentPressure</span> <span style="color: #339933;">=</span> <span style="color:#800080;">29.92</span><span style="color: #339933;">;</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000088;">$lastPressure</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// Float</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000088;">$weatherData</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> __construct<span style="color: #009900;">&#40;</span>Sample_Weather_Data <span style="color: #000088;">$weatherData</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">weatherData</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$weatherData</span><span style="color: #339933;">;</span>
        <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">weatherData</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">registerObserver</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> update<span style="color: #009900;">&#40;</span><span style="color: #000088;">$temp</span><span style="color: #339933;">,</span> <span style="color: #000088;">$humidity</span><span style="color: #339933;">,</span> <span style="color: #000088;">$pressure</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">lastPressure</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">currentPressure</span><span style="color: #339933;">;</span>
        <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">currentPressure</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$pressure</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">display</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> display<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;&lt;p&gt;Forecast: &quot;</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">currentPressure</span> <span style="color: #339933;">&gt;</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">lastPressure</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;Improving weather on the way!&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">elseif</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">currentPressure</span> <span style="color: #339933;">==</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">lastPressure</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;More of the same.&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">elseif</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">currentPressure</span> <span style="color: #339933;">&lt;</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">lastPressure</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #666666; font-style: italic;">// This could have been an else</span>
            <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;Watch out for cooler, rainy weather.&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
        <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;&lt;/p&gt;&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">class</span> Sample_Weather_Station 
<span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000088;">$weatherData</span><span style="color: #339933;">;</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000088;">$currentConditionsDisplay</span><span style="color: #339933;">;</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000088;">$statisticsDisplay</span><span style="color: #339933;">;</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000088;">$forecastDisplay</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> __construct<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">weatherData</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Sample_Weather_Data<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">currentConditionsDisplay</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Sample_Current_Conditions_Display<span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">weatherData</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">statisticsDisplay</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Sample_Statistics_Display<span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">weatherData</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">forecastDisplay</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Sample_Forecast_Display<span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">weatherData</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">weatherData</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setMeasurements</span><span style="color: #009900;">&#40;</span><span style="color:#800080;">80.0</span><span style="color: #339933;">,</span> <span style="color:#800080;">65.0</span><span style="color: #339933;">,</span> <span style="color:#800080;">30.4</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">weatherData</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setMeasurements</span><span style="color: #009900;">&#40;</span><span style="color:#800080;">82.0</span><span style="color: #339933;">,</span> <span style="color:#800080;">70.0</span><span style="color: #339933;">,</span> <span style="color:#800080;">29.2</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">weatherData</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setMeasurements</span><span style="color: #009900;">&#40;</span><span style="color:#800080;">78.0</span><span style="color: #339933;">,</span> <span style="color:#800080;">90.0</span><span style="color: #339933;">,</span> <span style="color:#800080;">29.2</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000088;">$ws</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Sample_Weather_Station<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

<p>Output:<br />
<code>Current conditions: 80F degrees and 65% humidity<br />
Avg/Max/Min temperature = 80/80/80<br />
Forecast: Improving weather on the way!<br />
Current conditions: 82F degrees and 70% humidity<br />
Avg/Max/Min temperature = 81/82/80<br />
Forecast: Watch out for cooler, rainy weather.<br />
Current conditions: 78F degrees and 90% humidity<br />
Avg/Max/Min temperature = 80/82/78<br />
Forecast: More of the same.</code></p>
]]></content:encoded>
			<wfw:commentRss>http://www.robert-gonzalez.com/2007/08/05/chapter-2-the-observer-pattern/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Toying with design patterns in PHP</title>
		<link>http://www.robert-gonzalez.com/2007/07/30/toying-with-design-patterns-in-php/</link>
		<comments>http://www.robert-gonzalez.com/2007/07/30/toying-with-design-patterns-in-php/#comments</comments>
		<pubDate>Mon, 30 Jul 2007 13:30:37 +0000</pubDate>
		<dc:creator>Robert Gonzalez</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[PHP Design Patterns]]></category>
		<category><![CDATA[Web Development]]></category>

		<guid isPermaLink="false">http://www.robert-gonzalez.com/2007/07/30/toying-with-design-patterns-in-php/</guid>
		<description><![CDATA[Wordpress sucks when it comes to posting PHP Code. Plain and simple.
And this example uses the WP-Syntax highlighter (which works as I'd have it work). In all cases, these posts used a regular opening PHP tag which was subsequently split by Wordpress. If you view the source of this post you will see that there [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Wordpress sucks when it comes to posting PHP Code. Plain and simple.</strong></p>
<p><del datetime="2007-07-30T20:27:21+00:00">And this example uses the WP-Syntax highlighter (which works as I'd have it work). In all cases, these posts used a regular opening PHP tag which was subsequently split by Wordpress. If you view the source of this post you will see that there is actually another opening PHP tag that is completely not shown above the phpinfo(); function.</del></p>
<p>I went ahead and ran my code snippet through my own, home grown highlighter and posted from that. It really sucks that I have to do that. You would think it would be something simple for Wordpress to be able to post code without a bunch of hoop jumping. Anyway, it sucks. That is that.</p>
<p>The following example code is a PHP version (with some minor changes) of the strategy pattern Java code from the first chapter of <strong>Head First Design Patterns</strong>. I am really starting to like that book because of the way it makes you learn, with or without your involvement in it.</p>
<div class="php"><code><br />
	 <span style="color: #0000BB;">&lt;?php</span><br />
	 <span style="color: #007700;">abstract</span><span style="color: #0000BB;">&nbsp;</span><span style="color: #007700;">class</span><span style="color: #0000BB;">&nbsp;</span><span style="color: #0000BB;">Duck</span><br />
	 <span style="color: #007700;">{</span><br />
	 <span style="color: #0000BB;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700;">public</span><span style="color: #0000BB;">&nbsp;</span><span style="color: #0000BB;">$flyBehavior</span><span style="color: #007700;">;</span><br />
	 <span style="color: #0000BB;">&nbsp;</span><br />
	 <span style="color: #0000BB;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700;">public</span><span style="color: #0000BB;">&nbsp;</span><span style="color: #0000BB;">$quackBehavior</span><span style="color: #007700;">;</span><br />
	 <span style="color: #0000BB;">&nbsp;</span><br />
	 <span style="color: #0000BB;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700;">abstract</span><span style="color: #0000BB;">&nbsp;</span><span style="color: #007700;">public</span><span style="color: #0000BB;">&nbsp;</span><span style="color: #007700;">function</span><span style="color: #0000BB;">&nbsp;</span><span style="color: #0000BB;">display</span><span style="color: #007700;">(</span><span style="color: #007700;">)</span><span style="color: #007700;">;</span><br />
	 <span style="color: #0000BB;">&nbsp;</span><br />
	 <span style="color: #0000BB;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700;">public</span><span style="color: #0000BB;">&nbsp;</span><span style="color: #007700;">function</span><span style="color: #0000BB;">&nbsp;</span><span style="color: #0000BB;">performFly</span><span style="color: #007700;">(</span><span style="color: #007700;">)</span><span style="color: #0000BB;">&nbsp;</span><span style="color: #007700;">{</span><br />
	 <span style="color: #0000BB;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB;">$this</span><span style="color: #007700;">-&gt;</span><span style="color: #0000BB;">flyBehavior</span><span style="color: #007700;">-&gt;</span><span style="color: #0000BB;">fly</span><span style="color: #007700;">(</span><span style="color: #007700;">)</span><span style="color: #007700;">;</span><br />
	 <span style="color: #0000BB;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700;">}</span><br />
	 <span style="color: #0000BB;">&nbsp;</span><br />
	 <span style="color: #0000BB;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700;">public</span><span style="color: #0000BB;">&nbsp;</span><span style="color: #007700;">function</span><span style="color: #0000BB;">&nbsp;</span><span style="color: #0000BB;">performQuack</span><span style="color: #007700;">(</span><span style="color: #007700;">)</span><span style="color: #0000BB;">&nbsp;</span><span style="color: #007700;">{</span><br />
	 <span style="color: #0000BB;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB;">$this</span><span style="color: #007700;">-&gt;</span><span style="color: #0000BB;">quackBehavior</span><span style="color: #007700;">-&gt;</span><span style="color: #0000BB;">quack</span><span style="color: #007700;">(</span><span style="color: #007700;">)</span><span style="color: #007700;">;</span><br />
	 <span style="color: #0000BB;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700;">}</span><br />
	 <span style="color: #0000BB;">&nbsp;</span><br />
	 <span style="color: #0000BB;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000;">//&nbsp;Added&nbsp;this&nbsp;afterward</span><br />
	 <span style="color: #0000BB;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700;">public</span><span style="color: #0000BB;">&nbsp;</span><span style="color: #007700;">function</span><span style="color: #0000BB;">&nbsp;</span><span style="color: #0000BB;">setFlyBehavior</span><span style="color: #007700;">(</span><span style="color: #0000BB;">Duck_Fly_Behavior</span><span style="color: #0000BB;">&nbsp;</span><span style="color: #0000BB;">$fb</span><span style="color: #007700;">)</span><span style="color: #0000BB;">&nbsp;</span><span style="color: #007700;">{</span><br />
	 <span style="color: #0000BB;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB;">$this</span><span style="color: #007700;">-&gt;</span><span style="color: #0000BB;">flyBehavior</span><span style="color: #0000BB;">&nbsp;</span><span style="color: #007700;">=</span><span style="color: #0000BB;">&nbsp;</span><span style="color: #0000BB;">$fb</span><span style="color: #007700;">;</span><br />
	 <span style="color: #0000BB;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700;">}</span><br />
	 <span style="color: #0000BB;">&nbsp;</span><br />
	 <span style="color: #0000BB;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700;">public</span><span style="color: #0000BB;">&nbsp;</span><span style="color: #007700;">function</span><span style="color: #0000BB;">&nbsp;</span><span style="color: #0000BB;">setQuackBehavior</span><span style="color: #007700;">(</span><span style="color: #0000BB;">Duck_Quack_Behavior</span><span style="color: #0000BB;">&nbsp;</span><span style="color: #0000BB;">$qb</span><span style="color: #007700;">)</span><span style="color: #0000BB;">&nbsp;</span><span style="color: #007700;">{</span><br />
	 <span style="color: #0000BB;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB;">$this</span><span style="color: #007700;">-&gt;</span><span style="color: #0000BB;">quackBehavior</span><span style="color: #0000BB;">&nbsp;</span><span style="color: #007700;">=</span><span style="color: #0000BB;">&nbsp;</span><span style="color: #0000BB;">$qb</span><span style="color: #007700;">;</span><br />
	 <span style="color: #0000BB;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700;">}</span><br />
	 <span style="color: #0000BB;">&nbsp;</span><br />
	 <span style="color: #0000BB;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700;">public</span><span style="color: #0000BB;">&nbsp;</span><span style="color: #007700;">function</span><span style="color: #0000BB;">&nbsp;</span><span style="color: #0000BB;">swim</span><span style="color: #007700;">(</span><span style="color: #007700;">)</span><span style="color: #0000BB;">&nbsp;</span><span style="color: #007700;">{</span><br />
	 <span style="color: #0000BB;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700;">echo</span><span style="color: #0000BB;">&nbsp;</span><span style="color: #DD0000;">'&lt;p&gt;All&nbsp;ducks&nbsp;float,&nbsp;even&nbsp;decoys.&lt;/p&gt;'</span><span style="color: #007700;">;</span><br />
	 <span style="color: #0000BB;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700;">}</span><br />
	 <span style="color: #007700;">}</span><br />
	 <span style="color: #0000BB;">&nbsp;</span><br />
	 <span style="color: #0000BB;">interface</span><span style="color: #0000BB;">&nbsp;</span><span style="color: #0000BB;">Duck_Fly_Behavior</span><br />
	 <span style="color: #007700;">{</span><br />
	 <span style="color: #0000BB;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700;">public</span><span style="color: #0000BB;">&nbsp;</span><span style="color: #007700;">function</span><span style="color: #0000BB;">&nbsp;</span><span style="color: #0000BB;">fly</span><span style="color: #007700;">(</span><span style="color: #007700;">)</span><span style="color: #007700;">;</span><br />
	 <span style="color: #007700;">}</span><br />
	 <span style="color: #0000BB;">&nbsp;</span><br />
	 <span style="color: #007700;">class</span><span style="color: #0000BB;">&nbsp;</span><span style="color: #0000BB;">Duck_Fly_Winged</span><span style="color: #0000BB;">&nbsp;</span><span style="color: #0000BB;">implements</span><span style="color: #0000BB;">&nbsp;</span><span style="color: #0000BB;">Duck_Fly_Behavior</span><span style="color: #0000BB;">&nbsp;</span><br />
	 <span style="color: #007700;">{</span><br />
	 <span style="color: #0000BB;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700;">public</span><span style="color: #0000BB;">&nbsp;</span><span style="color: #007700;">function</span><span style="color: #0000BB;">&nbsp;</span><span style="color: #0000BB;">fly</span><span style="color: #007700;">(</span><span style="color: #007700;">)</span><span style="color: #0000BB;">&nbsp;</span><span style="color: #007700;">{</span><br />
	 <span style="color: #0000BB;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700;">echo</span><span style="color: #0000BB;">&nbsp;</span><span style="color: #DD0000;">&quot;&lt;p&gt;I'm&nbsp;flying!&lt;/p&gt;&quot;</span><span style="color: #007700;">;</span><br />
	 <span style="color: #0000BB;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700;">}</span><br />
	 <span style="color: #007700;">}</span><br />
	 <span style="color: #0000BB;">&nbsp;</span><br />
	 <span style="color: #007700;">class</span><span style="color: #0000BB;">&nbsp;</span><span style="color: #0000BB;">Duck_Fly_Not</span><span style="color: #0000BB;">&nbsp;</span><span style="color: #0000BB;">implements</span><span style="color: #0000BB;">&nbsp;</span><span style="color: #0000BB;">Duck_Fly_Behavior</span><br />
	 <span style="color: #007700;">{</span><br />
	 <span style="color: #0000BB;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700;">public</span><span style="color: #0000BB;">&nbsp;</span><span style="color: #007700;">function</span><span style="color: #0000BB;">&nbsp;</span><span style="color: #0000BB;">fly</span><span style="color: #007700;">(</span><span style="color: #007700;">)</span><span style="color: #0000BB;">&nbsp;</span><span style="color: #007700;">{</span><br />
	 <span style="color: #0000BB;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700;">echo</span><span style="color: #0000BB;">&nbsp;</span><span style="color: #DD0000;">&quot;&lt;p&gt;I&nbsp;can't&nbsp;fly.&lt;/p&gt;&quot;</span><span style="color: #007700;">;</span><br />
	 <span style="color: #0000BB;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700;">}</span><br />
	 <span style="color: #007700;">}</span><br />
	 <span style="color: #0000BB;">&nbsp;</span><br />
	 <span style="color: #FF8000;">//&nbsp;Added&nbsp;this&nbsp;behavior</span><br />
	 <span style="color: #007700;">class</span><span style="color: #0000BB;">&nbsp;</span><span style="color: #0000BB;">Duck_Fly_Rocket</span><span style="color: #0000BB;">&nbsp;</span><span style="color: #0000BB;">implements</span><span style="color: #0000BB;">&nbsp;</span><span style="color: #0000BB;">Duck_Fly_Behavior</span><br />
	 <span style="color: #007700;">{</span><br />
	 <span style="color: #0000BB;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700;">public</span><span style="color: #0000BB;">&nbsp;</span><span style="color: #007700;">function</span><span style="color: #0000BB;">&nbsp;</span><span style="color: #0000BB;">fly</span><span style="color: #007700;">(</span><span style="color: #007700;">)</span><span style="color: #0000BB;">&nbsp;</span><span style="color: #007700;">{</span><br />
	 <span style="color: #0000BB;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700;">echo</span><span style="color: #0000BB;">&nbsp;</span><span style="color: #DD0000;">&quot;&lt;p&gt;I&nbsp;'m&nbsp;flying&nbsp;with&nbsp;a&nbsp;rocket&lt;/p&gt;&quot;</span><span style="color: #007700;">;</span><br />
	 <span style="color: #0000BB;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700;">}</span><br />
	 <span style="color: #007700;">}</span><br />
	 <span style="color: #0000BB;">&nbsp;</span><br />
	 <span style="color: #0000BB;">interface</span><span style="color: #0000BB;">&nbsp;</span><span style="color: #0000BB;">Duck_Quack_Behavior</span><span style="color: #0000BB;">&nbsp;</span><br />
	 <span style="color: #007700;">{</span><br />
	 <span style="color: #0000BB;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700;">public</span><span style="color: #0000BB;">&nbsp;</span><span style="color: #007700;">function</span><span style="color: #0000BB;">&nbsp;</span><span style="color: #0000BB;">quack</span><span style="color: #007700;">(</span><span style="color: #007700;">)</span><span style="color: #007700;">;</span><br />
	 <span style="color: #007700;">}</span><br />
	 <span style="color: #0000BB;">&nbsp;</span><br />
	 <span style="color: #007700;">class</span><span style="color: #0000BB;">&nbsp;</span><span style="color: #0000BB;">Duck_Quack_Loud</span><span style="color: #0000BB;">&nbsp;</span><span style="color: #0000BB;">implements</span><span style="color: #0000BB;">&nbsp;</span><span style="color: #0000BB;">Duck_Quack_Behavior</span><br />
	 <span style="color: #007700;">{</span><br />
	 <span style="color: #0000BB;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700;">public</span><span style="color: #0000BB;">&nbsp;</span><span style="color: #007700;">function</span><span style="color: #0000BB;">&nbsp;</span><span style="color: #0000BB;">quack</span><span style="color: #007700;">(</span><span style="color: #007700;">)</span><span style="color: #0000BB;">&nbsp;</span><span style="color: #007700;">{</span><br />
	 <span style="color: #0000BB;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700;">echo</span><span style="color: #0000BB;">&nbsp;</span><span style="color: #DD0000;">'&lt;p&gt;Quack!&lt;/p&gt;'</span><span style="color: #007700;">;</span><br />
	 <span style="color: #0000BB;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700;">}</span><br />
	 <span style="color: #007700;">}</span><br />
	 <span style="color: #0000BB;">&nbsp;</span><br />
	 <span style="color: #007700;">class</span><span style="color: #0000BB;">&nbsp;</span><span style="color: #0000BB;">Duck_Quack_Mute</span><span style="color: #0000BB;">&nbsp;</span><span style="color: #0000BB;">implements</span><span style="color: #0000BB;">&nbsp;</span><span style="color: #0000BB;">Duck_Quack_Behavior</span><br />
	 <span style="color: #007700;">{</span><br />
	 <span style="color: #0000BB;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700;">public</span><span style="color: #0000BB;">&nbsp;</span><span style="color: #007700;">function</span><span style="color: #0000BB;">&nbsp;</span><span style="color: #0000BB;">quack</span><span style="color: #007700;">(</span><span style="color: #007700;">)</span><span style="color: #0000BB;">&nbsp;</span><span style="color: #007700;">{</span><br />
	 <span style="color: #0000BB;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700;">echo</span><span style="color: #0000BB;">&nbsp;</span><span style="color: #DD0000;">'&lt;p&gt;__&nbsp;silence&nbsp;__&lt;/p&gt;'</span><span style="color: #007700;">;</span><br />
	 <span style="color: #0000BB;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700;">}</span><br />
	 <span style="color: #007700;">}</span><br />
	 <span style="color: #0000BB;">&nbsp;</span><br />
	 <span style="color: #007700;">class</span><span style="color: #0000BB;">&nbsp;</span><span style="color: #0000BB;">Duck_Quack_Squeak</span><span style="color: #0000BB;">&nbsp;</span><span style="color: #0000BB;">implements</span><span style="color: #0000BB;">&nbsp;</span><span style="color: #0000BB;">Duck_Quack_Behavior</span><br />
	 <span style="color: #007700;">{</span><br />
	 <span style="color: #0000BB;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700;">public</span><span style="color: #0000BB;">&nbsp;</span><span style="color: #007700;">function</span><span style="color: #0000BB;">&nbsp;</span><span style="color: #0000BB;">quack</span><span style="color: #007700;">(</span><span style="color: #007700;">)</span><span style="color: #0000BB;">&nbsp;</span><span style="color: #007700;">{</span><br />
	 <span style="color: #0000BB;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700;">echo</span><span style="color: #0000BB;">&nbsp;</span><span style="color: #DD0000;">'&lt;p&gt;Squeak.&lt;/p&gt;'</span><span style="color: #007700;">;</span><br />
	 <span style="color: #0000BB;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700;">}</span><br />
	 <span style="color: #007700;">}</span><br />
	 <span style="color: #0000BB;">&nbsp;</span><br />
	 <span style="color: #007700;">class</span><span style="color: #0000BB;">&nbsp;</span><span style="color: #0000BB;">Duck_Mallard</span><span style="color: #0000BB;">&nbsp;</span><span style="color: #007700;">extends</span><span style="color: #0000BB;">&nbsp;</span><span style="color: #0000BB;">Duck</span><span style="color: #0000BB;">&nbsp;</span><br />
	 <span style="color: #007700;">{</span><br />
	 <span style="color: #0000BB;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700;">public</span><span style="color: #0000BB;">&nbsp;</span><span style="color: #007700;">function</span><span style="color: #0000BB;">&nbsp;</span><span style="color: #0000BB;">__construct</span><span style="color: #007700;">(</span><span style="color: #007700;">)</span><span style="color: #0000BB;">&nbsp;</span><span style="color: #007700;">{</span><br />
	 <span style="color: #0000BB;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB;">$this</span><span style="color: #007700;">-&gt;</span><span style="color: #0000BB;">flyBehavior</span><span style="color: #0000BB;">&nbsp;</span><span style="color: #007700;">=</span><span style="color: #0000BB;">&nbsp;</span><span style="color: #007700;">new</span><span style="color: #0000BB;">&nbsp;</span><span style="color: #0000BB;">Duck_Fly_Winged</span><span style="color: #007700;">(</span><span style="color: #007700;">)</span><span style="color: #007700;">;</span><br />
	 <span style="color: #0000BB;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB;">$this</span><span style="color: #007700;">-&gt;</span><span style="color: #0000BB;">quackBehavior</span><span style="color: #0000BB;">&nbsp;</span><span style="color: #007700;">=</span><span style="color: #0000BB;">&nbsp;</span><span style="color: #007700;">new</span><span style="color: #0000BB;">&nbsp;</span><span style="color: #0000BB;">Duck_Quack_Loud</span><span style="color: #007700;">(</span><span style="color: #007700;">)</span><span style="color: #007700;">;</span><br />
	 <span style="color: #0000BB;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700;">}</span><br />
	 <span style="color: #0000BB;">&nbsp;</span><br />
	 <span style="color: #0000BB;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700;">public</span><span style="color: #0000BB;">&nbsp;</span><span style="color: #007700;">function</span><span style="color: #0000BB;">&nbsp;</span><span style="color: #0000BB;">display</span><span style="color: #007700;">(</span><span style="color: #007700;">)</span><span style="color: #0000BB;">&nbsp;</span><span style="color: #007700;">{</span><br />
	 <span style="color: #0000BB;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700;">echo</span><span style="color: #0000BB;">&nbsp;</span><span style="color: #DD0000;">&quot;&lt;p&gt;I'm&nbsp;a&nbsp;real&nbsp;Mallard&nbsp;Duck.&lt;/p&gt;&quot;</span><span style="color: #007700;">;</span><br />
	 <span style="color: #0000BB;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700;">}</span><br />
	 <span style="color: #007700;">}</span><br />
	 <span style="color: #0000BB;">&nbsp;</span><br />
	 <span style="color: #FF8000;">//&nbsp;Added&nbsp;a&nbsp;new&nbsp;duck&nbsp;type</span><br />
	 <span style="color: #007700;">class</span><span style="color: #0000BB;">&nbsp;</span><span style="color: #0000BB;">Duck_Model</span><span style="color: #0000BB;">&nbsp;</span><span style="color: #007700;">extends</span><span style="color: #0000BB;">&nbsp;</span><span style="color: #0000BB;">Duck</span><br />
	 <span style="color: #007700;">{</span><br />
	 <span style="color: #0000BB;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700;">public</span><span style="color: #0000BB;">&nbsp;</span><span style="color: #007700;">function</span><span style="color: #0000BB;">&nbsp;</span><span style="color: #0000BB;">__construct</span><span style="color: #007700;">(</span><span style="color: #007700;">)</span><span style="color: #0000BB;">&nbsp;</span><span style="color: #007700;">{</span><br />
	 <span style="color: #0000BB;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB;">$this</span><span style="color: #007700;">-&gt;</span><span style="color: #0000BB;">flyBehavior</span><span style="color: #0000BB;">&nbsp;</span><span style="color: #007700;">=</span><span style="color: #0000BB;">&nbsp;</span><span style="color: #007700;">new</span><span style="color: #0000BB;">&nbsp;</span><span style="color: #0000BB;">Duck_Fly_Not</span><span style="color: #007700;">(</span><span style="color: #007700;">)</span><span style="color: #007700;">;</span><br />
	 <span style="color: #0000BB;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB;">$this</span><span style="color: #007700;">-&gt;</span><span style="color: #0000BB;">quackBehavior</span><span style="color: #0000BB;">&nbsp;</span><span style="color: #007700;">=</span><span style="color: #0000BB;">&nbsp;</span><span style="color: #007700;">new</span><span style="color: #0000BB;">&nbsp;</span><span style="color: #0000BB;">Duck_Quack_Loud</span><span style="color: #007700;">(</span><span style="color: #007700;">)</span><span style="color: #007700;">;</span><br />
	 <span style="color: #0000BB;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700;">}</span><br />
	 <span style="color: #0000BB;">&nbsp;</span><br />
	 <span style="color: #0000BB;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700;">public</span><span style="color: #0000BB;">&nbsp;</span><span style="color: #007700;">function</span><span style="color: #0000BB;">&nbsp;</span><span style="color: #0000BB;">display</span><span style="color: #007700;">(</span><span style="color: #007700;">)</span><span style="color: #0000BB;">&nbsp;</span><span style="color: #007700;">{</span><br />
	 <span style="color: #0000BB;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700;">echo</span><span style="color: #0000BB;">&nbsp;</span><span style="color: #DD0000;">&quot;&lt;p&gt;I'm&nbsp;a&nbsp;Model&nbsp;Duck.&lt;/p&gt;&quot;</span><span style="color: #007700;">;</span><br />
	 <span style="color: #0000BB;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700;">}</span><br />
	 <span style="color: #007700;">}</span><br />
	 <span style="color: #0000BB;">&nbsp;</span><br />
	 <span style="color: #007700;">class</span><span style="color: #0000BB;">&nbsp;</span><span style="color: #0000BB;">Duck_Simulator</span><br />
	 <span style="color: #007700;">{</span><br />
	 <span style="color: #0000BB;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700;">public</span><span style="color: #0000BB;">&nbsp;</span><span style="color: #0000BB;">$mallard</span><span style="color: #007700;">;</span><br />
	 <span style="color: #0000BB;">&nbsp;</span><br />
	 <span style="color: #0000BB;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000;">//&nbsp;Added</span><br />
	 <span style="color: #0000BB;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700;">public</span><span style="color: #0000BB;">&nbsp;</span><span style="color: #0000BB;">$model</span><span style="color: #007700;">;</span><br />
	 <span style="color: #0000BB;">&nbsp;</span><br />
	 <span style="color: #0000BB;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700;">public</span><span style="color: #0000BB;">&nbsp;</span><span style="color: #007700;">function</span><span style="color: #0000BB;">&nbsp;</span><span style="color: #0000BB;">__construct</span><span style="color: #007700;">(</span><span style="color: #007700;">)</span><span style="color: #0000BB;">&nbsp;</span><span style="color: #007700;">{</span><br />
	 <span style="color: #0000BB;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB;">$this</span><span style="color: #007700;">-&gt;</span><span style="color: #0000BB;">mallard</span><span style="color: #0000BB;">&nbsp;</span><span style="color: #007700;">=</span><span style="color: #0000BB;">&nbsp;</span><span style="color: #007700;">new</span><span style="color: #0000BB;">&nbsp;</span><span style="color: #0000BB;">Duck_Mallard</span><span style="color: #007700;">(</span><span style="color: #007700;">)</span><span style="color: #007700;">;</span><br />
	 <span style="color: #0000BB;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB;">$this</span><span style="color: #007700;">-&gt;</span><span style="color: #0000BB;">mallard</span><span style="color: #007700;">-&gt;</span><span style="color: #0000BB;">performQuack</span><span style="color: #007700;">(</span><span style="color: #007700;">)</span><span style="color: #007700;">;</span><br />
	 <span style="color: #0000BB;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB;">$this</span><span style="color: #007700;">-&gt;</span><span style="color: #0000BB;">mallard</span><span style="color: #007700;">-&gt;</span><span style="color: #0000BB;">performFly</span><span style="color: #007700;">(</span><span style="color: #007700;">)</span><span style="color: #007700;">;</span><br />
	 <span style="color: #0000BB;">&nbsp;</span><br />
	 <span style="color: #0000BB;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB;">$this</span><span style="color: #007700;">-&gt;</span><span style="color: #0000BB;">model</span><span style="color: #0000BB;">&nbsp;</span><span style="color: #007700;">=</span><span style="color: #0000BB;">&nbsp;</span><span style="color: #007700;">new</span><span style="color: #0000BB;">&nbsp;</span><span style="color: #0000BB;">Duck_Model</span><span style="color: #007700;">(</span><span style="color: #007700;">)</span><span style="color: #007700;">;</span><br />
	 <span style="color: #0000BB;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB;">$this</span><span style="color: #007700;">-&gt;</span><span style="color: #0000BB;">model</span><span style="color: #007700;">-&gt;</span><span style="color: #0000BB;">performFly</span><span style="color: #007700;">(</span><span style="color: #007700;">)</span><span style="color: #007700;">;</span><br />
	 <span style="color: #0000BB;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB;">$this</span><span style="color: #007700;">-&gt;</span><span style="color: #0000BB;">model</span><span style="color: #007700;">-&gt;</span><span style="color: #0000BB;">setFlyBehavior</span><span style="color: #007700;">(</span><span style="color: #007700;">new</span><span style="color: #0000BB;">&nbsp;</span><span style="color: #0000BB;">Duck_Fly_Rocket</span><span style="color: #007700;">)</span><span style="color: #007700;">;</span><br />
	 <span style="color: #0000BB;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB;">$this</span><span style="color: #007700;">-&gt;</span><span style="color: #0000BB;">model</span><span style="color: #007700;">-&gt;</span><span style="color: #0000BB;">performFly</span><span style="color: #007700;">(</span><span style="color: #007700;">)</span><span style="color: #007700;">;</span><br />
	 <span style="color: #0000BB;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700;">}</span><br />
	 <span style="color: #007700;">}</span><br />
	 <span style="color: #0000BB;">&nbsp;</span><br />
	 <span style="color: #0000BB;">$duck</span><span style="color: #0000BB;">&nbsp;</span><span style="color: #007700;">=</span><span style="color: #0000BB;">&nbsp;</span><span style="color: #007700;">new</span><span style="color: #0000BB;">&nbsp;</span><span style="color: #0000BB;">Duck_Simulator</span><span style="color: #007700;">(</span><span style="color: #007700;">)</span><span style="color: #007700;">;</span><br />
	 <span style="color: #FF8000;">//$duck-&gt;mallard-&gt;display();</span><br />
	 <span style="color: #FF8000;">//$duck-&gt;mallard-&gt;swim();</span><br />
	 <span style="color: #0000BB;">?&gt;</span><br />
</code>
</div>
<p>Output:<br />
<code>Quack!<br />
I'm flying!<br />
I can't fly.<br />
I'm flying with a rocket</code></p>
]]></content:encoded>
			<wfw:commentRss>http://www.robert-gonzalez.com/2007/07/30/toying-with-design-patterns-in-php/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>
