Kategori: C#

Singleton Design Pattern

Singleton’ı şu iki maddede özetleyebiliriz. Bir sınıfın bir örneği olacağını garanti eder. Bu sınıfı global bir erişim noktası yapar. Bir design pattern’ı kullanmadan önce onun zayıf yanlarını iyi bilmek gerek. Profesyonel hayatta, her yanından Singleton fışkıran kodlara gülündüğüne bir çok kez şahit oldum. Bu kahkahaların sebebini araştırırken okuduğum ve içlerinden notlar aldığım bir kaç yazı var. Singleton’ı uygulamadan önce bu notları sizlerle paylaşmak isterim. Use Your Singletons Wisely (Singletonlarınızı Bilgece Kullanın) Yazı, neyin gerçekten Singleton olması gerektiğini sorguluyor. Bu sorgulamayı yapmadan önce, Singleton’ın sınıflar arası bağımlığı artırdığını belirtiyor. Yani Singleton’ın göründüğü kadar masum olmadığı konusunda yazar ile aynı fikirdeyiz. Yazının

Okumaya devam et

Command Design Pattern

Bu yazıma başlamadan önce, eğer okumadıysanız acilen okumanız gereken bir kaynak önermek istiyorum; “Robert Nystrom – Game Programming Patterns“. Bu kitapta, oyun dünyasındaki genel problemleri çözmek için kullanılan design pattern’lardan oldukça detaylı olarak bahsediliyor. Senaryo 20×20 birimlik bir tabanın üzerinde, her seferinde bir birim olmak üzere aşağı, yukarı, sağa ve sola hareket edebilen bir küp düşünün. Bu kübün her hareketi, geri alınabilir olsun. Yani küp “yukarı, yukarı, sol, sol” hareketini tamamladıktan sonra, her “geri al” komutu verildiğinde, “sağ, sağ, aşağı, aşağı” komutlarını tekrarlayarak, başlangıç noktasına dönsün. Adım 1 – Command Design Pattern’a Giriş Command Design Pattern’da, isteklerimizi komut nesneleri olarak

Okumaya devam et

Observer Design Pattern

Observer Design Pattern (Gözlemci Tasarım Deseni), iki ana bileşenden oluşur; Subject ve Observer… Subject, üzerinde değişimlerin gözlendiği, gözlenmek istendiği bileşendir. Observer ise bir subject’teki değişimleri gözlemlemek için kullanılan bileşendir. Observer Design Pattern’da, bir subject’teki değişimden, onu gözleyenler haberdar edilir. Observer Pattern’ı bir başarımlar sistemi kurmak için kullanabiliriz. Buna yönelik bir senaryo belirleyip, bu senaryoyu Observer Design Pattern kullanarak çözelim. Senaryo Oyunumuzda bir skor verisi olduğunu düşünelim. Bu skor verisindeki değişiklikleri gözleyen 3 adet de başarımımız olsun. Başarımlarımız kendi hedef skorlarına geldiklerinde açılsınlar ve başarılmış olsunlar. Adım 1 ScoreDataSubject isimli bir nesne oluşturalım. Bu nesne, dinleyeceğimiz nesne. Bütün observer’larımız, bu nesneye

Okumaya devam et

Decorator Design Pattern

Decorator design pattern, nesnemizin yapısını bozmadan, nesnemize yeni bir fonksiyonellik katmamızı sağlıyor. Bu pattern’da, decorator nesnesi, fonksiyonellik katacağı nesneyi referans olarak tutuyor ve onun hangi fonksiyonunu decorate edecekse önce o fonksiyonu, ardından da kendi fonksiyonunu çağırıyor. Böylece referans olarak tuttuğu nesneye yeni bir fonksiyon katmış oluyor. Biraz karışık bir tanım oldu, farkındayım. Gelin bir örnekle açıklayalım.

Okumaya devam et

Factory Design Pattern

Manager Class : Merhaba, ben bir A nesnesi yaratmak istiyorum. Geliştirici : O zaman Factory nesnesine başvurman gerek. Factory design pattern’ı yukarıdaki kısa konuşma özetliyor aslında. Nesne yaratmak için Factory nesneleri oluştururuz ve nesne yaratmak istediğimizde, Factory nesnelerine başvururuz. Gelin Unity’de basit bir örneği gerçekleyelim.

Okumaya devam et

Enum’ı Generic Olarak Kullanmak

C#’ta normal şartlar altında bir generic tipi enum olarak belirtmek istersek şunu kullanmamız gerekirdi. Ne yazık ki enum için bu işe yaramıyor. Bunun sebebiyse, enum’ın özel bir tip olarak davranması ve Microsoft’un bunu henüz implemente etmemesi.

Okumaya devam et

Obje Havuzu (Object Pool)

Unity3D’de Nesneleri yaratmanın ve öldürmenin yükü bir hayli ağırdır. Saniyede yüzlerce nesneye bellekte yer açıp, sonra o nesneleri bellekten tekrar silmek, performans penceresinden bakıldığında pek de hoş karşılanmayabilir. Eğer nesne yaratma ve silme işlemini çok sık yapıyorsanız, Object Pool işte tam da burada yardımınıza koşuyor. Senaryo Bir silah nesnesiniz var. Bu silah nesnei bulunduğu noktadan her yöne saniyenin onda biri kadar bir sıklıkla ateş etsin. Mermiler ekrandan çıktıklarında silinsinler. Adım 1 Senaryomuzu gerçeklemeye, bullet nesnemizi oluşturarak başlayalım. Bullet nesnesini bir Sphere nesnesine ataç ediniz ve bu nesneyi bir prefab haline getiriniz. Bullet

Bullet nesnemizin Transform component’ini bir _transform değişkeni

Okumaya devam et