Wednesday, October 3, 2012

Singleton (Tek) Nesneler (C#)


Singleton (Tek) Nesneler

singleton deseni bir programın yaşam süresince belirli olan bir nesneden sadece bir örneğin(instance) olmasını garantiler.
Aynı zamanda bu desen, yaratılan tek nesneye ilgili sınıfın dışından global düzeyde mutlaka erişilmesini hedefler.

Yeni bir nesne oluşturmak için new anahtar sözcüğünün temsil ettiği yapıcı metoduna dışarıdan erişimin olması gerekir.
Yani yapıcı metodun puplic olarak bildirilmiş olması gerekir. Ancak singleton desenine göre belirli bir anda sadece bir
nesne olabileceği için new anahtar sözcüğünün kullanımının yasaklanması gerekir yani yapıcı metotodun protected ya da private
olarak bildirilmesi gerekir.

Eğer bir metodun varsayılan yapıcı metodu puplic olarak bildirilmemiş ise ilgili sınıf türünden herhangi bir nesnenin sınıfın
dışında tanımlanması mümkün değildir.

Bizim istediğimiz yalnızca bir sınıfın yaratılması olduğuna göre bunu ancak statik üye elemanlar ile yapabiliriz.

1. yöntem:

Puplic class Ev
{

   /*static elemanlar içerisinde static elemanlar çağrılabileceği için static tanımladık. */
   private static Ev ornek;
 
   /* dışardan bir müdahale olmaması için private tanımlanan ev türünden instance değerine belirleyici yazmalıyız.*/
   Puplic Static Ev Ornek
   {
     get
     {
      /* ev sınıfının nesne örneğini geri döndürmek için; */   
       return Ev.ornek;
     }
   }

  /* yeni sınıf oluşturulmaması için dışardan ulaşılmamak üzere private tanımlanmalı. */
  Private Ev()
  {

  }


   /* static constructorlar parametre almazlar ve private olarak tanımlanırlar. */
   /* ev sınıfından nesne kurulmadan çalıştırılması gerektiği için static tanımladık. diğer türlü sınıfı kurmadan constructorı
    * çağırmamız mümkün olmucak ve new anahtar sözcüğünü bir kereyle sınırlandırma şansımız olmucaktı. */
   Static Ev()
  {

       /* instance static olarak tanımlandığı için buradaki static metot tarafından çağrılabiliyor. */
       /* instance değişkeni ile Ev sınıfı kurulduğu anda bellekte bir kereye mahsus olmak üzere new anahtar sözcüğü ile
        * Ev sınıfı için yer oluşturuluyor. daha sonra ev sınıfından üretilen nesneler aynı özellikleri taşıyacaktır. */
     ornek= New Ev();
  }


2.yöntem:

Puplic class Ev
{
  private static Ev ornek;

  Private Ev()
  {
  }

 /* nesne üzerinden erişilmesine gerek kalmadan direkt sınıf ile erişilmesi için statik olmak zorunda */
 
  Puplic static Ev Ornek()
  {
   
      if ( nesne == null)
          nesne = new Ev();
   
     return nesne;
    }

 }
    Gördüğümüz üzere nesne ile ilk olarak sınıf belleğe yüklediğinde değilde o nesneyi ilk defa kullanmak istediğimizde
   yaratılıyor. ilgili nesneyi her istediğimizde yeni bir nesnenin yaratılmaması içinde
   if(nesne == null)
   şeklinde bir koşul yazdığımıza dikkat edin.
 
   sınıf yaratmak için Ev evim = Ev.Ornek();

No comments:

Post a Comment