<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	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/"
		>
<channel>
	<title>Uyarlanabilir Singleton sınıfı yazısına yapılan yorumlar</title>
	<atom:link href="http://www.gokceyalcin.com/singleton-uyarlanabilir-design-pattern-class-sinif/feed" rel="self" type="application/rss+xml" />
	<link>http://www.gokceyalcin.com/singleton-uyarlanabilir-design-pattern-class-sinif</link>
	<description>Welcome to darkside of the Source, we have cookies!</description>
	<lastBuildDate>Fri, 25 Mar 2011 10:27:56 -0400</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<item>
		<title>Kadir Özdemir tarafından</title>
		<link>http://www.gokceyalcin.com/singleton-uyarlanabilir-design-pattern-class-sinif/comment-page-1#comment-743</link>
		<dc:creator>Kadir Özdemir</dc:creator>
		<pubDate>Fri, 28 Aug 2009 08:45:42 +0000</pubDate>
		<guid isPermaLink="false">http://www.gokceyalcin.com/?p=222#comment-743</guid>
		<description>gökce patternlerin ikisinide vermis yapilmasi gereken ikisini birlestirmek, (factory singleton) hem parametre vere bilir hem her siniftan birtane olusur.,
factory de new sinif yerine sinif::getinstance

@eburhan
yukarda bazen bir siniftan birbirinden farkli görevler icin coklu nesneler olusturmam gerekiyor demissin, mesela ne icin buna gerek duyuyorsun?</description>
		<content:encoded><![CDATA[<p>gökce patternlerin ikisinide vermis yapilmasi gereken ikisini birlestirmek, (factory singleton) hem parametre vere bilir hem her siniftan birtane olusur.,<br />
factory de new sinif yerine sinif::getinstance</p>
<p>@eburhan<br />
yukarda bazen bir siniftan birbirinden farkli görevler icin coklu nesneler olusturmam gerekiyor demissin, mesela ne icin buna gerek duyuyorsun?</p>
]]></content:encoded>
	</item>
	<item>
		<title>Gökçe YALÇIN tarafından</title>
		<link>http://www.gokceyalcin.com/singleton-uyarlanabilir-design-pattern-class-sinif/comment-page-1#comment-726</link>
		<dc:creator>Gökçe YALÇIN</dc:creator>
		<pubDate>Thu, 20 Aug 2009 13:50:39 +0000</pubDate>
		<guid isPermaLink="false">http://www.gokceyalcin.com/?p=222#comment-726</guid>
		<description>Buarada konuyla ilgili adam kılık kontrol etmediğim bir önceki verdiğim link pek işe yarar şeyler içermediğini görünce 
Türkçe, Emre Çevik tarafından yazılmış iki güzel anlatım buldum:

&lt;a target=_blank href=&quot;http://code.internet.com.tr/singleton-design-pattern/&quot; rel=&quot;nofollow&quot;&gt;http://code.internet.com.tr/singleton-design-pattern/&lt;/a&gt; ( not: buradaki örnekte instanceların contextleri değişmiş olma ihtimaline göre arrayli olarak tutulmuş, bu aslında singleton standartında olmayan birşey )

&lt;a target=_blank href=&quot;http://code.internet.com.tr/factory-method-design-pattern/&quot; rel=&quot;nofollow&quot;&gt;http://code.internet.com.tr/factory-method-design-pattern/&lt;/a&gt;</description>
		<content:encoded><![CDATA[<p>Buarada konuyla ilgili adam kılık kontrol etmediğim bir önceki verdiğim link pek işe yarar şeyler içermediğini görünce<br />
Türkçe, Emre Çevik tarafından yazılmış iki güzel anlatım buldum:</p>
<p><a target=_blank href="http://code.internet.com.tr/singleton-design-pattern/" rel="nofollow">http://code.internet.com.tr/singleton-design-pattern/</a> ( not: buradaki örnekte instanceların contextleri değişmiş olma ihtimaline göre arrayli olarak tutulmuş, bu aslında singleton standartında olmayan birşey )</p>
<p><a target=_blank href="http://code.internet.com.tr/factory-method-design-pattern/" rel="nofollow">http://code.internet.com.tr/factory-method-design-pattern/</a></p>
]]></content:encoded>
	</item>
	<item>
		<title>Gökçe YALÇIN tarafından</title>
		<link>http://www.gokceyalcin.com/singleton-uyarlanabilir-design-pattern-class-sinif/comment-page-1#comment-725</link>
		<dc:creator>Gökçe YALÇIN</dc:creator>
		<pubDate>Thu, 20 Aug 2009 11:06:09 +0000</pubDate>
		<guid isPermaLink="false">http://www.gokceyalcin.com/?p=222#comment-725</guid>
		<description>Merhaba,

Öncelikle, singleton sınıfını kullanırken dikkat edilecek noktalarından başlıcalarından birisi, asla sınıfın context&#039;ini değiştirmemek. O yüzden __construct protected, değiştirilemez, parametre içermez, vs. Nitekim, bu sınıfı birden fazla yerde, fakat aynı sınıf olarak getirmek sözkonusu, yani aynı işlevi yapmasını bekliyoruz. Bu nedenle __construct sırasında context değişkenleri sabit olmalı ve sınıf işleyişini asla değiştirmeden ne zaman çağırılırsa çağırılsın, belleğindeki aynı işlevi yapmalı, sonuç olarak çağırdığımız sınıf eğer aynı olmayacaksa, onu singleton yapmamızın hiç bir anlamı yok. 

Senin söylediğin ise &#039;factory&#039; design patternine yaklaşıyor. Bu factory sınıfları, başka sınıfları driver olarak gören, onlarla önceden interface olarak tanımladığımız methodlarla iletişim kuran bir üst-sınıf. Factory design patternını singleton özelliğine sahip bir yükleyici olarak düşünebiliriz, can alıcı nokta bu sınıf contextini değiştirmiyor, hala görevi sadece interface&#039;i belli bir sınıfı çağırmak ve onunla iletişimini sağlamak, sanırım örnek verirsem daha açıklayıcı olur:

$image::factory(&#039;imagemagick&#039;)-&gt;load(&#039;a.jpg&#039;)-&gt;resize(array(&#039;x&#039;=&gt;125,&#039;y&#039;=&gt;125));
$image::factory(&#039;gd&#039;)-&gt;load(&#039;a.jpg&#039;)-&gt;resize(array(&#039;x&#039;=&gt;125,&#039;y&#039;=&gt;125));

gd ve imagemagick alt sınıflarında, load ve resize image interfaceinde kesin olarak tanımlanmış, methodlar. Sen hangi sınıfı yüklüyorsan, o sınıfa göre işlem yapıyorlar. Varolan örnekleri incelemek istersen, Kohana&#039;daki driver yapılarını incelemeni öneririm.

Fakat tek sınıf instanceları değilde, array olarak sınıf geçirmekten bahsetmişsin, eğer böyle bir durum varsa, bu sınıfların &#039;araç&#039; sınıflar olması çok olası. Eğer bu sınıflar araçsa ( html::makeTable() ) gibi, kendi contextlerine ihtiyaç duymadan tasarlanmalıdırlar, bunun yolu ise static methodlar. Böylece varolan sınıfa, instance referansını herhangi bir şekilde bildirmeden, o sınıfın içinde herhangi bir yerde html::makeTable(); mail::send(&quot;x&quot;,..); gibi  çağrımlarda bulunabilirsin. Tertemiz kod olur. Kendi contextine ihtiyaç duyan sınıflar bile bu şekilde tasarlanabiliyorlar, örneğin socket::sendCmd(&quot;eburhan.com&quot;,80,&quot;GET /  HTTP 1/0&quot;), kendi içinde önce static function sendCmd(..) { $c = socket::connect($h,$p); ... } ile resource handlerını alıyor, sonra komutu gönderiyor, hepsi static.

İkincisi ise illaki context&#039;e ihtiyaç duyulan sınıflar, $db gibi. Nitekim illa connect etmesi, db select etmiş olması, vb durumları olduğundan instance&#039;ının geçirilmesi şart olabilir. Benim aklımdaki çözümler, 
1 ) bu tür sınıflar birden fazla kullanılmıyorsa, singleton yapmak, böylece ilk context her zaman korunur. Handikap: Belki de uygulama iki veritabanı üzerinde aynı anda çalışıyordur, illaki iki adet sınıfın olması şarttır.
2 ) bir registery singleton sınıfı kullanırsın. Bu singleton registery sınıfının görevi verilen objeler ve arrayleri istendiğinde geri vermektir. Aynı zamanda anahtara göre var mı yok mu sorgulaması da yaptırılabilir. Böylece Registery::add(&#039;db&#039;,array($dbo1,$dbo2)); şeklinde attığın iki sınıfı, başka bir sınıfın içinden, if ($db = Registery::get(&#039;db&#039;) AND count($db)) { throw new Exception(&#039;No available db interface resources found&#039;,321); } şeklinde kontrol ettirebilirsin ve işleyebilirsin.
3 ) çağrılan her bir methodda, gerekli interface listeleri verilir, hamallıktır, ama çalışır. 

Dahası için ve olaki bir yerlerde hatalıysam:
http://www.devshed.com/c/a/PHP/ObjectOriented-Programming-Through-Design-Patterns/</description>
		<content:encoded><![CDATA[<p>Merhaba,</p>
<p>Öncelikle, singleton sınıfını kullanırken dikkat edilecek noktalarından başlıcalarından birisi, asla sınıfın context&#8217;ini değiştirmemek. O yüzden __construct protected, değiştirilemez, parametre içermez, vs. Nitekim, bu sınıfı birden fazla yerde, fakat aynı sınıf olarak getirmek sözkonusu, yani aynı işlevi yapmasını bekliyoruz. Bu nedenle __construct sırasında context değişkenleri sabit olmalı ve sınıf işleyişini asla değiştirmeden ne zaman çağırılırsa çağırılsın, belleğindeki aynı işlevi yapmalı, sonuç olarak çağırdığımız sınıf eğer aynı olmayacaksa, onu singleton yapmamızın hiç bir anlamı yok. </p>
<p>Senin söylediğin ise &#8216;factory&#8217; design patternine yaklaşıyor. Bu factory sınıfları, başka sınıfları driver olarak gören, onlarla önceden interface olarak tanımladığımız methodlarla iletişim kuran bir üst-sınıf. Factory design patternını singleton özelliğine sahip bir yükleyici olarak düşünebiliriz, can alıcı nokta bu sınıf contextini değiştirmiyor, hala görevi sadece interface&#8217;i belli bir sınıfı çağırmak ve onunla iletişimini sağlamak, sanırım örnek verirsem daha açıklayıcı olur:</p>
<p>$image::factory(&#8217;imagemagick&#8217;)-&gt;load(&#8217;a.jpg&#8217;)-&gt;resize(array(&#8217;x'=&gt;125,&#8217;y'=&gt;125));<br />
$image::factory(&#8217;gd&#8217;)-&gt;load(&#8217;a.jpg&#8217;)-&gt;resize(array(&#8217;x'=&gt;125,&#8217;y'=&gt;125));</p>
<p>gd ve imagemagick alt sınıflarında, load ve resize image interfaceinde kesin olarak tanımlanmış, methodlar. Sen hangi sınıfı yüklüyorsan, o sınıfa göre işlem yapıyorlar. Varolan örnekleri incelemek istersen, Kohana&#8217;daki driver yapılarını incelemeni öneririm.</p>
<p>Fakat tek sınıf instanceları değilde, array olarak sınıf geçirmekten bahsetmişsin, eğer böyle bir durum varsa, bu sınıfların &#8216;araç&#8217; sınıflar olması çok olası. Eğer bu sınıflar araçsa ( html::makeTable() ) gibi, kendi contextlerine ihtiyaç duymadan tasarlanmalıdırlar, bunun yolu ise static methodlar. Böylece varolan sınıfa, instance referansını herhangi bir şekilde bildirmeden, o sınıfın içinde herhangi bir yerde html::makeTable(); mail::send(&#8221;x&#8221;,..); gibi  çağrımlarda bulunabilirsin. Tertemiz kod olur. Kendi contextine ihtiyaç duyan sınıflar bile bu şekilde tasarlanabiliyorlar, örneğin socket::sendCmd(&#8221;eburhan.com&#8221;,80,&#8221;GET /  HTTP 1/0&#8243;), kendi içinde önce static function sendCmd(..) { $c = socket::connect($h,$p); &#8230; } ile resource handlerını alıyor, sonra komutu gönderiyor, hepsi static.</p>
<p>İkincisi ise illaki context&#8217;e ihtiyaç duyulan sınıflar, $db gibi. Nitekim illa connect etmesi, db select etmiş olması, vb durumları olduğundan instance&#8217;ının geçirilmesi şart olabilir. Benim aklımdaki çözümler,<br />
1 ) bu tür sınıflar birden fazla kullanılmıyorsa, singleton yapmak, böylece ilk context her zaman korunur. Handikap: Belki de uygulama iki veritabanı üzerinde aynı anda çalışıyordur, illaki iki adet sınıfın olması şarttır.<br />
2 ) bir registery singleton sınıfı kullanırsın. Bu singleton registery sınıfının görevi verilen objeler ve arrayleri istendiğinde geri vermektir. Aynı zamanda anahtara göre var mı yok mu sorgulaması da yaptırılabilir. Böylece Registery::add(&#8217;db&#8217;,array($dbo1,$dbo2)); şeklinde attığın iki sınıfı, başka bir sınıfın içinden, if ($db = Registery::get(&#8217;db&#8217;) AND count($db)) { throw new Exception(&#8217;No available db interface resources found&#8217;,321); } şeklinde kontrol ettirebilirsin ve işleyebilirsin.<br />
3 ) çağrılan her bir methodda, gerekli interface listeleri verilir, hamallıktır, ama çalışır. </p>
<p>Dahası için ve olaki bir yerlerde hatalıysam:<br />
<a href="http://www.devshed.com/c/a/PHP/ObjectOriented-Programming-Through-Design-Patterns/" rel="nofollow">http://www.devshed.com/c/a/PHP/ObjectOriented-Programming-Through-Design-Patterns/</a></p>
]]></content:encoded>
	</item>
	<item>
		<title>Erhan tarafından</title>
		<link>http://www.gokceyalcin.com/singleton-uyarlanabilir-design-pattern-class-sinif/comment-page-1#comment-724</link>
		<dc:creator>Erhan</dc:creator>
		<pubDate>Thu, 20 Aug 2009 09:50:05 +0000</pubDate>
		<guid isPermaLink="false">http://www.gokceyalcin.com/?p=222#comment-724</guid>
		<description>Merhaba Gökçe.

Singleton sınıfları gerçekten çok yararlılar. Özellikle fonksiyonlar ve başka sınıflar içerisinden bir sınıf çağırırken, acaba daha önceden çağrılmış mı çağrılmamış mı tereddütünden bizleri kurtarıyorlar.

&quot;Singleton::getInstance($sınıf)&quot; şeklinde kullandığımızı düşünerekten fikrini almak istediğim 2 nokta var:

1-) Eğer örneğini oluşturduğumuz sınıfın __construct metoduna parametre(ler) göndermek istersek (ki genelde istiyoruz) &quot;getInstance&quot; metodunu en etkin şekilde nasıl düzenleyebiliriz? &quot;Singleton::getInstance($sınıf, $parametreler)&quot; şeklinde parametreleri Array tipinde geçirsek nasıl olur?

2-) Bazen bir sınıftan, birbirinden farklı görevlerde kullanmak üzere çoklu nesneler oluşturmamız gerekebiliyor.

$obje = new Class;
$bu_baska_bir_obje = new Class;
$bu_bambaska_bir_obje = new Class;

gibi... Böyle bir durumda &quot;$_instance&quot; property&#039;sini multi-dimension bir array olarak yeniden düzenlesek sence nasıl olur? Aşağıdaki gibi mesela:

Array(
[$sınıf] =&gt; array(
 [0] =&gt; // $obje,
 [1] =&gt; // $bu_baska_bir_obje,
 [2] =&gt; // $bu_bambaska_bir_obje
))

&quot;Singleton::getInstance($sınıf, $paramemetreler, $index)&quot; şeklinde de aynı sınıfın çoklu örnekleri saklayabiliriz ve daha sonra index numarasındn erişebiliriz diye düşünüyorum.

Teşekkürler.</description>
		<content:encoded><![CDATA[<p>Merhaba Gökçe.</p>
<p>Singleton sınıfları gerçekten çok yararlılar. Özellikle fonksiyonlar ve başka sınıflar içerisinden bir sınıf çağırırken, acaba daha önceden çağrılmış mı çağrılmamış mı tereddütünden bizleri kurtarıyorlar.</p>
<p>&#8220;Singleton::getInstance($sınıf)&#8221; şeklinde kullandığımızı düşünerekten fikrini almak istediğim 2 nokta var:</p>
<p>1-) Eğer örneğini oluşturduğumuz sınıfın __construct metoduna parametre(ler) göndermek istersek (ki genelde istiyoruz) &#8220;getInstance&#8221; metodunu en etkin şekilde nasıl düzenleyebiliriz? &#8220;Singleton::getInstance($sınıf, $parametreler)&#8221; şeklinde parametreleri Array tipinde geçirsek nasıl olur?</p>
<p>2-) Bazen bir sınıftan, birbirinden farklı görevlerde kullanmak üzere çoklu nesneler oluşturmamız gerekebiliyor.</p>
<p>$obje = new Class;<br />
$bu_baska_bir_obje = new Class;<br />
$bu_bambaska_bir_obje = new Class;</p>
<p>gibi&#8230; Böyle bir durumda &#8220;$_instance&#8221; property&#8217;sini multi-dimension bir array olarak yeniden düzenlesek sence nasıl olur? Aşağıdaki gibi mesela:</p>
<p>Array(<br />
[$sınıf] =&gt; array(<br />
 [0] =&gt; // $obje,<br />
 [1] =&gt; // $bu_baska_bir_obje,<br />
 [2] =&gt; // $bu_bambaska_bir_obje<br />
))</p>
<p>&#8220;Singleton::getInstance($sınıf, $paramemetreler, $index)&#8221; şeklinde de aynı sınıfın çoklu örnekleri saklayabiliriz ve daha sonra index numarasındn erişebiliriz diye düşünüyorum.</p>
<p>Teşekkürler.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Murat BEŞER tarafından</title>
		<link>http://www.gokceyalcin.com/singleton-uyarlanabilir-design-pattern-class-sinif/comment-page-1#comment-638</link>
		<dc:creator>Murat BEŞER</dc:creator>
		<pubDate>Wed, 22 Jul 2009 12:11:18 +0000</pubDate>
		<guid isPermaLink="false">http://www.gokceyalcin.com/?p=222#comment-638</guid>
		<description>The üşengeç :)</description>
		<content:encoded><![CDATA[<p>The üşengeç :)</p>
]]></content:encoded>
	</item>
	<item>
		<title>Gökçe YALÇIN tarafından</title>
		<link>http://www.gokceyalcin.com/singleton-uyarlanabilir-design-pattern-class-sinif/comment-page-1#comment-635</link>
		<dc:creator>Gökçe YALÇIN</dc:creator>
		<pubDate>Mon, 20 Jul 2009 09:05:03 +0000</pubDate>
		<guid isPermaLink="false">http://www.gokceyalcin.com/?p=222#comment-635</guid>
		<description>Düzeltme için teşekkürler, biraz aceleye gelmiş yazı

5.3.0 için 1 büyük yazı yerine, buradaki gibi işlevine göre parça parça tanıtacağım. Nitekim mesela namespace&#039;leri, get_class_name&#039;in gelişinin yaratacağı farkları, ve ereg-&gt;preg dönüşümünü tek bir postta hem karışır, hem uzun sıkıcı bir şey olur sanırım. 
Sorduğun şey quickstart benzeri birşeyse düşünmüyorum, daha changelog&#039;undaki her maddeyi alt alta koyunca sayfa uzayıp gidiyor, ben üşendim o işten.</description>
		<content:encoded><![CDATA[<p>Düzeltme için teşekkürler, biraz aceleye gelmiş yazı</p>
<p>5.3.0 için 1 büyük yazı yerine, buradaki gibi işlevine göre parça parça tanıtacağım. Nitekim mesela namespace&#8217;leri, get_class_name&#8217;in gelişinin yaratacağı farkları, ve ereg->preg dönüşümünü tek bir postta hem karışır, hem uzun sıkıcı bir şey olur sanırım.<br />
Sorduğun şey quickstart benzeri birşeyse düşünmüyorum, daha changelog&#8217;undaki her maddeyi alt alta koyunca sayfa uzayıp gidiyor, ben üşendim o işten.</p>
]]></content:encoded>
	</item>
	<item>
		<title>osman tarafından</title>
		<link>http://www.gokceyalcin.com/singleton-uyarlanabilir-design-pattern-class-sinif/comment-page-1#comment-631</link>
		<dc:creator>osman</dc:creator>
		<pubDate>Fri, 17 Jul 2009 15:29:21 +0000</pubDate>
		<guid isPermaLink="false">http://www.gokceyalcin.com/?p=222#comment-631</guid>
		<description>Merhaba.
PHP 5.3.0 nimetlerinden faydalaniyoruz artik! :)
Kodu denemek isteyenler icin:
X:destroySingleton(); da bir &#039;:&#039; eksik.
Ayrica $instance degiskeni yerine $_instance degiskeni hata almamanizi saglayacaktir.

Not: Bu yazinin akabinde detayli bir php 5.3.0 yazisi gelecek mi yoksa is basa mi dustu deyip kollari sivayalim mi? :)</description>
		<content:encoded><![CDATA[<p>Merhaba.<br />
PHP 5.3.0 nimetlerinden faydalaniyoruz artik! :)<br />
Kodu denemek isteyenler icin:<br />
X:destroySingleton(); da bir &#8216;:&#8217; eksik.<br />
Ayrica $instance degiskeni yerine $_instance degiskeni hata almamanizi saglayacaktir.</p>
<p>Not: Bu yazinin akabinde detayli bir php 5.3.0 yazisi gelecek mi yoksa is basa mi dustu deyip kollari sivayalim mi? :)</p>
]]></content:encoded>
	</item>
</channel>
</rss>

