<?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>adamczuk.net.pl &#187; factory</title>
	<atom:link href="http://adamczuk.net.pl/tag/factory/feed/" rel="self" type="application/rss+xml" />
	<link>http://adamczuk.net.pl</link>
	<description>Just another WordPress weblog</description>
	<lastBuildDate>Sun, 06 May 2012 22:34:15 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Wzorzec projektowy Fabryka abstrakcyjna</title>
		<link>http://adamczuk.net.pl/2010/02/04/wzorzec-projektowy-fabryka-abstrakcyjna/</link>
		<comments>http://adamczuk.net.pl/2010/02/04/wzorzec-projektowy-fabryka-abstrakcyjna/#comments</comments>
		<pubDate>Wed, 03 Feb 2010 23:00:30 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Wzorce projektowe]]></category>
		<category><![CDATA[design patern]]></category>
		<category><![CDATA[factory]]></category>

		<guid isPermaLink="false">http://adamczuk.net.pl/?p=263</guid>
		<description><![CDATA[Poprzedni wpis dotyczył wzorca projektowego Singleton, który jest niezbędny w przypadku pojedynczych obiektów tego samego typu. Obecny tekst porusza problem tworzenia różnych obiektów jednego typu (tej samej rodziny) bez specyfikowania ich konkretnych klas. Fabryka abstrakcyjna Plusem wykorzystania wzorca fabryki abstrakcyjnej jest możliwość ukrycia szczegółów implementacyjnych klas reprezentujących dany produkt. W ten sposób klient widzi tylko [...]]]></description>
			<content:encoded><![CDATA[<p>Poprzedni wpis dotyczył wzorca projektowego Singleton, który jest niezbędny w przypadku pojedynczych obiektów tego samego typu. Obecny tekst porusza problem tworzenia różnych obiektów jednego typu (tej samej rodziny) bez specyfikowania ich konkretnych klas.<span id="more-263"></span></p>
<h3>Fabryka abstrakcyjna</h3>
<p>Plusem wykorzystania wzorca fabryki abstrakcyjnej jest możliwość ukrycia szczegółów implementacyjnych klas reprezentujących dany produkt. W ten sposób klient widzi tylko interfejs. Ukryte zostają również nazwy klas, co odizolowuje klienta od problemu określenia, do której klasy należy obiekt.</p>
<pre><code>&lt;?php
interface IUser {
	function getName();
}

class User implements IUser {
	public function __construct($id) { }

	public function getName() {
		return 'Jacek';
	}
}

class UserFactory {
	public static function create($id) {
		return new User($id);
	}
}
?&gt;</code></pre>
<p>Klasa <code>User</code> zaprezentowana powyżej implementuje interfejs <code>IUser</code>, który zawiera metodę <code>getName()</code>. Tworzenie nowego obiektu użytkownika odbywa się poprzez statyczną metodę <code>create()</code>. Szczegóły tworzenia użytkowników ukryte są w klasie <code>User</code> fabryki.</p>
<h3>Podsumowanie</h3>
<p>Istnieje prosta metoda sprawdzenia czy klasa działa poprawnie.</p>
<pre><code>&lt;?php
$oUser = UserFactory::create(1);
echo($oUser->getName());
?&gt;</code></pre>
<p>Poniższy wydruk pokazuje, że dokładnie tak się dzieje.</p>
<pre><code>Jacek</code></pre>
<p>Wzorzec projektowy fabryki abstrakcyjnej kładzie nacisk na tworzenie produktów z konkretnej rodziny. </p>
]]></content:encoded>
			<wfw:commentRss>http://adamczuk.net.pl/2010/02/04/wzorzec-projektowy-fabryka-abstrakcyjna/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

