<?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>Blog de Youssef &#187; 2-Creational Patterns</title>
	<atom:link href="https://blog.developpez.com/youssef/pcategory/design-patterns/2-creational-patterns/feed" rel="self" type="application/rss+xml" />
	<link>https://blog.developpez.com/youssef</link>
	<description></description>
	<lastBuildDate>Sat, 04 Sep 2010 16:04:26 +0000</lastBuildDate>
	<language>fr-FR</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.1.42</generator>
	<item>
		<title>Builder Pattern</title>
		<link>https://blog.developpez.com/youssef/p9226/design-patterns/2-creational-patterns/builder_pattern</link>
		<comments>https://blog.developpez.com/youssef/p9226/design-patterns/2-creational-patterns/builder_pattern#comments</comments>
		<pubDate>Sat, 21 Aug 2010 14:58:18 +0000</pubDate>
		<dc:creator><![CDATA[zerocoolyoussef]]></dc:creator>
				<category><![CDATA[2-Creational Patterns]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Description En général le detail de la construction d&#8217;un objet comme l&#8217;instanciation et l&#8217;initialisaiton de ces composants est conservé à l&#8217;intérieur de l&#8217;objet dans son constructeur. Cette approche convient aussi longtems que la construction de l&#8217;objet en question est simple:le processus de construction de l&#8217;objet est bien défini et produit la même représentation de l&#8217;objet. Cette approche ne convient plus si l&#8217;objet crée est complexe parce que tout le traitement de construction sera maintenu à [&#8230;]]]></description>
				<content:encoded><![CDATA[<p><strong>Description</strong></p>
<p>En général le detail de la construction d&rsquo;un objet comme l&rsquo;instanciation et l&rsquo;initialisaiton de ces composants est conservé à l&rsquo;intérieur de l&rsquo;objet dans son constructeur.</p>
<p>Cette approche convient aussi longtems que la construction de l&rsquo;objet en question est simple:le processus de construction de l&rsquo;objet est bien défini et produit la même représentation de l&rsquo;objet.</p>
<p>Cette approche ne convient plus si l&rsquo;objet crée est complexe parce que tout le traitement de construction sera maintenu à l&rsquo;intérieur de l&rsquo;objet ce qui peut devenir encombrant et moins modulaire.</p>
<p>Par la suite , Apporter des modifications ou bien ajouter des nouveaux processus de construction d&rsquo;objet exige la modification du code.</p>
<p>En utilisant le pattern Builder , la logique de la construction de l&rsquo;objet est déplacé à une classe distincte Appelé &laquo;&nbsp;Builder Class&nbsp;&raquo;. Par la suite , Ce pattern introduit un autre niveau de séparation pour éviter que les méthodes de Builder d&rsquo;être invoqué directement et cela en utilisant le &laquo;&nbsp;Director&nbsp;&raquo; qui est responsable de l&rsquo;appel des différents méthodes du builder requis pour la construction de l&rsquo;objet.</p>
<p><img src="http://img844.imageshack.us/img844/9819/builder1.jpg" alt="" title="" /></p>
<p><img src="http://img835.imageshack.us/img835/4783/builder2.jpg" alt="" title="" /></p>
<p><strong>Exemple</strong></p>
<p><img src="http://img230.imageshack.us/img230/7166/builder3.jpg" alt="" title="" /></p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Prototype Pattern</title>
		<link>https://blog.developpez.com/youssef/p9224/design-patterns/2-creational-patterns/prototype_pattern</link>
		<comments>https://blog.developpez.com/youssef/p9224/design-patterns/2-creational-patterns/prototype_pattern#comments</comments>
		<pubDate>Sat, 21 Aug 2010 13:24:05 +0000</pubDate>
		<dc:creator><![CDATA[zerocoolyoussef]]></dc:creator>
				<category><![CDATA[2-Creational Patterns]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Prototype Pattern Description Ce pattern est utilisé quand le système a besoin de nouvelles instances, mais il ignore de quelle classe, or il dispose d&#8217;instance de la classe désirée. Ce pattern peut aussi être utilisé quand le système a besoin de créer plusieurs objets identiques et le processus de création de classe à travers les classes factories où bien d&#8217;autres facteurs peut revenir plus cher qu&#8217;une simple copie Alors le principe est simple: -On crée [&#8230;]]]></description>
				<content:encoded><![CDATA[<p><strong>Prototype Pattern </strong></p>
<p><strong>Description</strong></p>
<p>Ce pattern est utilisé quand le système a besoin de nouvelles instances, mais il ignore de quelle classe, or il dispose d&rsquo;instance de la classe désirée.
</p>
<p>Ce pattern peut aussi être utilisé quand le système a besoin de créer plusieurs objets identiques et le processus de création de classe à travers les classes factories où bien d&rsquo;autres facteurs peut revenir plus cher qu&rsquo;une simple copie</p>
<p>Alors le principe est simple:<br />
-On crée un objet et on le désigne comme prototype.<br />
-On crée les autres objets en faisant des copies simples du prototype.</p>
<p><img src="http://img826.imageshack.us/img826/301/prototype1m.jpg" alt="" title="" /></p>
<p><strong>Exemple</strong></p>
<p><img src="http://img841.imageshack.us/img841/2605/prototype2.jpg" alt="" title="" /></p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Abstract Factory</title>
		<link>https://blog.developpez.com/youssef/p9214/design-patterns/2-creational-patterns/abstract_factory</link>
		<comments>https://blog.developpez.com/youssef/p9214/design-patterns/2-creational-patterns/abstract_factory#comments</comments>
		<pubDate>Wed, 18 Aug 2010 01:11:39 +0000</pubDate>
		<dc:creator><![CDATA[zerocoolyoussef]]></dc:creator>
				<category><![CDATA[2-Creational Patterns]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Description Le pattern Abstract Factory met en place une classe fournissant l&#8217;interface de fabrication d&#8217;une famille d&#8217;objets. Ce pattern est utile quand le système utilise des objets regroupés en famille. Et si ,Selon certains facteurs, le système utilise des objets d&#8217;une famille ou d&#8217;une autre. Exemple]]></description>
				<content:encoded><![CDATA[<p><strong>Description</strong></p>
<p>Le pattern Abstract Factory met en place une classe fournissant l&rsquo;interface de fabrication d&rsquo;une famille d&rsquo;objets.</p>
<p>Ce pattern est utile quand le système utilise des objets regroupés en famille. Et si ,Selon certains facteurs, le système utilise des objets d&rsquo;une famille ou d&rsquo;une autre.</p>
<p><img src="http://img801.imageshack.us/img801/3315/abstractfactory1.jpg" alt="" title="" /></p>
<p><strong>Exemple</strong></p>
<p><img src="http://img225.imageshack.us/img225/2308/abstractfactory2.jpg" alt="" title="" /></p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Factory Method</title>
		<link>https://blog.developpez.com/youssef/p9210/design-patterns/2-creational-patterns/factory_method</link>
		<comments>https://blog.developpez.com/youssef/p9210/design-patterns/2-creational-patterns/factory_method#comments</comments>
		<pubDate>Mon, 16 Aug 2010 23:13:10 +0000</pubDate>
		<dc:creator><![CDATA[zerocoolyoussef]]></dc:creator>
				<category><![CDATA[2-Creational Patterns]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Description Dans une hiérarchie de classes, Tous les sous-classes héritent des méthodes implémentées dans la classe mère. Ces sous-classes pourraient redéfinir ces méthode pour les adapter et offrir des fonctionnalités différentes. Quand on connaît exactement la fonctionnalité qu&#8217;on a besoin, on pourrait instancié directement la bonne classe dans la hierarchie des classes qui offre cette fonctionnalité. Or,parfois on ne peut pas connaître auparavant quelle classe dans la hierarchie on aura besoin. Le choix pourrait dépendre [&#8230;]]]></description>
				<content:encoded><![CDATA[<p><strong>Description</strong></p>
<p>Dans une hiérarchie de classes, Tous les sous-classes héritent des méthodes implémentées dans la classe mère. Ces sous-classes pourraient redéfinir ces méthode pour les adapter et offrir des fonctionnalités différentes.</p>
<p>Quand on connaît exactement la fonctionnalité qu&rsquo;on a besoin, on pourrait instancié directement  la bonne classe dans la hierarchie des classes qui offre cette fonctionnalité.</p>
<p>Or,parfois on ne peut pas connaître auparavant quelle classe dans la hierarchie on aura besoin.<br />
Le choix pourrait dépendre de plusieurs facteurs comme:<br />
-L&rsquo;état d&rsquo;execution de l&rsquo;application.<br />
-Paramètres de configuration de l&rsquo;application.<br />
-prévision d&rsquo;éventuel amélioration et évolution de l&rsquo;application.</p>
<p>Dans ce cas, La conception normale consiste à implémenter un traitement de sélection de la bonne classe à instancier de la hierarchie de classe.
</p>
<p><img src="http://img337.imageshack.us/img337/2438/factorymethode1.jpg" alt="" title="" /></p>
<p>
Ce type de design a plusieurs inconveniants:<br />
-Chaque classe cliente qui va utiliser ce service est obligée d&rsquo;implémenter le traitement de selection de la classe, et par conséquant nous aurons un couplage fort entre les objets de l&rsquo;application et le service offert par cette hierachie de classe<br />
-Si jamais le traitement de selection de la classe change, tous les objets de l&rsquo;application qui utilise la hiérarchie doivent changer.<br />
-Traitement lourd si jamais l&rsquo;instanciation des sous-classes se fait différement et les facteurs de selection de la classe est plus compliqués.<br />
-Les objets de l&rsquo;application doivent connaître les services offerts par la hierarchie des classes.</p>
<p><strong>Solution</strong></p>
<p>Dans ce cas , le pattern Factory Method recommande l&rsquo;encapsulation du traitement de la selection de la bonne classe dans une méthode d&rsquo;ou le nom &laquo;&nbsp;Factory method&nbsp;&raquo; qui aura comme rôle :<br />
-Selection de la classe appropriée à instanciée en se basant sur les facteurs influents.<br />
-Instanciation la classe en question et la retourner comme instance de la classe mère.
</p>
<p><img src="http://img9.imageshack.us/img9/7243/factorymethode2.jpg" alt="" title="" /></p>
<p>En implémentant le Factory Method Pattern on bénéficie de plusieurs avantages:<br />
-L&rsquo;application pourra utiliser la &laquo;&nbsp;Factory method&nbsp;&raquo; pour accéder à la bonne instance de classe et cela élimine le faite que les objets d&rsquo;application implémentent le traitement de selection de classe.<br />
-&laquo;&nbsp;Factory method&nbsp;&raquo; cache toute la complexité du choix de la bonne classe à instancier.<br />
-Puisque la &laquo;&nbsp;Factory method&nbsp;&raquo; retourne l&rsquo;instance de la classe mère alors les objets d&rsquo;application n&rsquo;ont pas besoin de connaître l&rsquo;exsistance de la hiérarchie de classe.</p>
<p><strong>Exemple1</strong></p>
<p><img src="http://img823.imageshack.us/img823/3098/factorymethode3.jpg" alt="" title="" /></p>
<p><strong>Exemple2</strong></p>
<p><img src="http://img227.imageshack.us/img227/1386/factorymethode4.jpg" alt="" title="" /></p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Singleton</title>
		<link>https://blog.developpez.com/youssef/p9211/design-patterns/2-creational-patterns/singleton</link>
		<comments>https://blog.developpez.com/youssef/p9211/design-patterns/2-creational-patterns/singleton#comments</comments>
		<pubDate>Tue, 17 Aug 2010 00:19:50 +0000</pubDate>
		<dc:creator><![CDATA[zerocoolyoussef]]></dc:creator>
				<category><![CDATA[2-Creational Patterns]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Description Le Pattern singleton est facile à comprendre. Il nous aide à implémenter une classe pour laquel on a besoin q&#8217;une seule instance pendant la durée de vie de l&#8217;application comme : Connexion à une base de données,&#8230;. On pourrait implémenter facilement ce principe en ayant une variable globale pour maintenir une instance unique. Et tous les objets clients pourront l&#8217;utiliser. Mais cette approche ne pourra pas prévenir la création d&#8217;autres instances sauf que si [&#8230;]]]></description>
				<content:encoded><![CDATA[<p><strong>Description</strong></p>
<p>Le Pattern singleton est facile à comprendre. Il nous aide à implémenter une classe pour laquel on a besoin q&rsquo;une seule instance pendant la durée de vie de l&rsquo;application comme : Connexion à une base de données,&#8230;.
</p>
<p>
On pourrait implémenter facilement ce principe en ayant une variable globale pour maintenir une instance unique. Et tous les objets clients pourront l&rsquo;utiliser. Mais cette approche ne pourra pas prévenir la création d&rsquo;autres instances sauf que si tous les objets clients  contrôleront eux même ses nombres d&rsquo;instances.</p>
<p>Mais cela transgresse le principe de responsabilité des classe, puisque les objets clients n&rsquo;ont pas à connaître le détails de création de la classe en question, puisque,c&rsquo;est elle qui doit s&rsquo;en charger.</p>
<p><strong>Solution</strong></p>
<p>Une classe qui maintient elle même son instance unique est appelée une classe singleton et le pattern Singleton nous aide à l&rsquo;implémenter</p>
<p><strong>Exemple</strong></p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">public class FileLogger implements Logger{ <br />
&nbsp; &nbsp; &nbsp;private static FileLogger logger; <br />
&nbsp; &nbsp; &nbsp;//Interdir &nbsp;les objets clients &nbsp;l'utilisation du &nbsp;constructor <br />
&nbsp; &nbsp; &nbsp;private FileLogger()[ <br />
&nbsp; &nbsp; &nbsp;} <br />
&nbsp; &nbsp; &nbsp;public static FileLogger getFileLogger(){ <br />
&nbsp; if(logger==null) &nbsp;[ <br />
&nbsp; logger=new FileLogger(); <br />
&nbsp; &nbsp; &nbsp;} <br />
&nbsp; &nbsp; &nbsp;return logger; <br />
&nbsp; &nbsp; &nbsp;} <br />
//Autres méthodes de la classe <br />
}</div></div>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>
