Ana içeriğe atla

Tasarım Desenleri : Singleton

Türkçe'ye Tek Nesne olarak çevrilen bu tasarım desenindeki ana amaç bir nesnenin yalnızca bir kez oluşturulabilmesidir. Buna neden ihtiyaç duyarız sorusuna gelince mesela bir bağlantıyı dinleyen nesneniz olsun. Bunu ikince kez yaratmak kimi zaman sorunlara yol açabilir. Sonuçta bunlar sonsuz threadlerdir. Onun yerine bu nesne bir kez yaratılsın ve ihtiyaç duyulduğu zaman daha önce oluşan nesne oraya gitsin ve işlerini halletsin isteriz.
Basit bir örnek verelim :

class RandomSayıVerici
{
private RandomSayıVerici() { }
private static Random r = new Random();

public static Random nesneAl()
{ return r; }
public static int sayiVer(int min, int max)
{
return r.Next(min, max);
}
public static int sayiVer(int max)
{
return r.Next(max);
}
public static int sayiVer()
{
return r.Next();
}
}

Şimdi biz bu örnekte bir adet RandomSayiVerici oluşturduk. Özellikle Random sınıfını kullandım çünkü özellikle yani başlan bir çok kişi bu sınıfın sürekli aynı sayı ürettiğini düşünüyor. Ama kaçırdıkları şey sınıfı sürekli baştan yaratmaları. Ve bunun bir döngü içinde olduğu düşünülürse mikro saniyeler seviyesinde sayı değişimi çok da fazla olmayacaktır. İstenilen yerde :
TextBox1.Text += RandomSayıVerici.sayiVer(0, 53).ToString() ;
şeklinde kullanılması yeterli.
İyi çalışmalar..

Yorumlar

Bu blogdaki popüler yayınlar

Rusya Vizesi Fırsatçılığı

Neredeyse 7 yıl olacak yazı yazmayalı :) Eski yazılarıma baktım da hepsi programlama ile ilgili. Tabi o zamanlar henüz yurt dışına çıkmadığımdan vize ile ilgili işlemleri de bilmiyordum. Gelelim Rusya vizesi olayına. Geçen sonbaharda hazır uçak biletlerinde kampanya varken bir yerlere gidelim dedik. Vize alınması gerektiğini biliyorduk ama yine de Mart ayı için Rusya'ya bilet aldık. (Gidiş dönüş 2 kişi 300TL) Şubat ayı geldi hala vizeler kalkmayınca (malum adamların uçağını uçurduk) dedik vize başvurusu yapalım. Ama Rusya vizesi shengen gibi kolay değilmiş. Aslında kolay ama bir tur operatöründen alınmış bir belge istiyorlar. Bunu da internet üzerinden formu doldururken farkettik. Bir kaç araştırmadan sonra aracı şirketler bu belge ile birlikte vize ücretine kişi başı 150$ istediklerini görünce dedik uçak biletini yakalım gitmeyelim daha iyi. Hatta bizim evin yakınında, neredeyse her gün önünden geçtiğim bir Jolly Tur var. Geçerken sorayım dedim Rusya vize ücretini. O da kişi...

Datalist Kontrolü

Bir makale sitesinde yazıların başlıklarının altalta dizildiğini düşünün ve başlığa tıklandığında o yazıya gitmek istiyoruz diyelim. Bunu datalist ile yapmak istersek yazılacak kod buna cok benzerdir. Yalnızca sayfa ismi yada datasource farklılık gösterebilir. Datalist'i sayfamıza eklediğimizde "Edit Item Template" kısmında nasıl görünmesini istiyorsak o şekilde dizayn edebiliriz. Mesela ben içine bir tablo attım, tablo içine de bir adet HyperLink attım. Datasource bağlandığı anda ki bu kod tarafında da bağlanabilir, "Baslik" ve "ID" kısmımlarını Eval komutu ile çekiyor. <asp:DataList ID="DataList1" runat="server" Width="800px" DataSourceID="AccessDataSource2">      <ItemTemplate>            <table >               <tr>                  <td>                     <asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl='<%#"Post.aspx?ID="+ Eval(...

Windows DLL'leri ile Pencere Kontrolü

Hemen hızlı bir giriş yapalım değil mi :) Şimdi asıl olay şu yaptığımız bir programdan diğer açık olan program pencerelerini nasıl kontrol ederiz? Tabiki user32 DLL'i ile :) [DllImport("user32.dll")] public static extern int FindWindow( string lpClassName, // class name string lpWindowName // window name ); Bu fonksiyon bizim açık olan programı buluyor ve bize onun Windows altındaki ID'sini veriyor. Tabiki "windows name" parametresine programın tam adının yazılması gerekli. [DllImport("user32.dll")] public static extern int SetForegroundWindow( int hWnd // handle to window ); Burası ise biraz önceki ID değerini alarak, bu ID'ye sahip olan pencereyi ön tarafa getiriyor. [DllImport("user32.dll")] public static extern int SendMessage( int hWnd, // handle to destination window uint Msg, // message int wParam, // fir...