Nisa Efendioğlu

Android Design Patterns

Profile picture

Nisa Efendioğlu

Post Image

📱 Android’de Kullanılan Temel Tasarım Desenleri

Yazılım geliştirme sürecinde, kodun okunabilirliğini artırmak, bakımını kolaylaştırmak ve karşılaşılan yaygın problemleri verimli şekilde çözebilmek için belirli tasarım desenleri kullanılır. Bu desenler, belirli ihtiyaçlara yönelik geliştirilen ve defalarca test edilmiş çözüm yaklaşımlarıdır. Android projelerinde de bu desenler, doğru yer ve zamanda kullanıldığında işlerin hem düzenli hem de sürdürülebilir olmasını sağlar.

Bu yazıda, Android dünyasında sıkça kullanılan bazı temel tasarım desenlerini ele alacağız. Her birini işlevi üzerinden değerlendirerek, hangi senaryoda neden tercih edilmesi gerektiğine birlikte bakacağız.

🎨 Tasarım Deseni Nedir?

Tasarım deseni, sık karşılaşılan yazılım problemlerine yönelik geliştirilmiş, tekrarlanabilir çözüm yöntemidir. Desenler, belirli bir problemi çözmek için nasıl bir yapı kurulması gerektiğini tarif eder, ama uygulamayı tamamen şekillendirmez. Yani desenler, bir çatı sunar; detayları ise projeye göre şekillendirilir.

🔹 Android’de Sık Kullanılan Tasarım Desenleri

1️⃣ Singleton Pattern

Tanım:
Bir sınıfın yalnızca tek bir örneğe sahip olmasını ve bu örneğe global olarak erişilmesini sağlar.

Ne Zaman Kullanılır?

  • Uygulama boyunca tek bir veritabanı bağlantısı kullanılacaksa.
  • Configuration ayarları tüm uygulamada tek bir yerden yönetilecekse.
  • Cache yönetimi, logger gibi global servislerde.

Avantajları:

  • Kaynak tasarrufu sağlar.
  • Global erişim noktası oluşturur.
  • Kullanımı ve implementasyonu kolaydır.

Dezavantajları:

  • Fazla kullanımı bağımlılık yaratır.
  • Unit test yazımını zorlaştırabilir.
  • Çok iş parçacıklı (multi-threaded) ortamlarda dikkatli yönetilmezse veri tutarsızlığı riski oluşturabilir.

Ne Gibi Projelerde Kullanılmalı?

  • Tek veritabanı bağlantısı gereken mobil uygulamalarda.
  • Global yapılandırma ve servis kontrolü gerektiren projelerde.
  • Küçük/orta ölçekli mobil uygulamalar ve basit servis yönetimi projelerinde.

Dikkat edilmesi gereken:
Aşırı kullanımı sistemi bağımlı ve test edilmesi zor bir hale getirebilir. Gerçekten ihtiyaç olmayan yerlerde kullanılmamalıdır.

Örnek:
image

📝 Açıklama:
Bu kod parçası, Singleton Pattern örneğidir çünkü object anahtar kelimesiyle tanımlanan DatabaseHelper, uygulama çalıştığı sürece tek bir örnek oluşturur ve her yerden bu örneğe erişilebilir. Veritabanı gibi ortak kullanılacak yapılar için ideal.

2️⃣ Factory Pattern

Tanım:
Bir sınıfın hangi türde nesne oluşturacağına, nesneyi kullanan yapı değil, fabrika (factory) karar verir. Üretim mantığı merkezileştirilir.

Ne Zaman Kullanılır?

  • Farklı türde nesneler oluşturulması gerekiyorsa.
  • Nesnenin hangi tür olacağının çalışma zamanında belirlenmesi gerekiyorsa.

Avantajları:

  • Nesne üretim sürecini merkezileştirir.
  • Kodun esnekliğini artırır.
  • Yeni tür ekleme süreçleri kolaylaşır.

Dezavantajları:

  • Kod karmaşıklığı artabilir.
  • Küçük projelerde gereksiz soyutlama yaratabilir.

Ne Gibi Projelerde Kullanılmalı?

  • Farklı türde model veya ekran oluşturan uygulamalarda.
  • Ödeme sistemleri, bildirim yönetimi gibi farklı işlem türlerine göre nesne oluşturulması gereken projelerde.

Örnek:
image

📝 Açıklama:
Bu kod parçası, Factory Pattern kullanıyor. ShapeFactory sınıfı, dışarıdan gelen type değerine göre hangi Shape nesnesinin oluşturulacağına karar veriyor. Bu sayede nesne üretme süreci merkezileşiyor ve nesneleri kullanan taraf, nasıl üretildiğini bilmek zorunda kalmıyor.

3️⃣ Observer Pattern

Tanım:
Bir nesnede meydana gelen değişikliklerin, bu nesneyi gözlemleyen diğer nesnelere otomatik olarak bildirilmesini sağlar.

Ne Zaman Kullanılır?

  • Veri değişimlerinin birden fazla bileşeni etkilemesi gerektiğinde.
  • Arayüz güncellemeleri, bildirim sistemleri gibi yapılarda.

Avantajları:

  • Nesneler arası gevşek bağlılık sağlar.
  • Dinamik yapı kurmayı kolaylaştırır.
  • Abone sayısını artırıp azaltmak esnektir.

Dezavantajları:

  • Çok fazla observer olması durumunda performans düşebilir.
  • Observer'ların iyi yönetilmemesi bellek sızıntısına (memory leak) neden olabilir.

Ne Gibi Projelerde Kullanılmalı?

  • Gerçek zamanlı veri takibi, chat uygulamaları.
  • Bildirim sistemleri, canlı skor, haber akışı gibi güncellenen verilerde.
  • Android’de LiveData, StateFlow gibi yapıların temel mantığı Observer’dır.

Örnek:
image

📝 Açıklama:
Burada Observer Pattern uygulanıyor. NewsAgency sınıfı, kendisini izleyen (observer) nesneleri tutuyor ve herhangi bir değişiklik olduğunda bu nesnelere haber veriyor. Böylece haber ajansı değişimi yalnızca kendi bildiriyor, gözlemciler de bu değişiklikten haberdar oluyor.

4️⃣ Builder Pattern

Tanım:
Karmaşık nesnelerin, adım adım ve okunabilir biçimde inşa edilmesini sağlar. Özellikle çok fazla parametreye sahip nesneler için tercih edilir.

Ne Zaman Kullanılır?

  • Nesne oluşturulurken isteğe bağlı birçok parametre varsa.
  • Parametrelerin tamamının tek constructor ile verilmesi karmaşaya yol açıyorsa.

Avantajları:

  • Kod okunabilirliğini artırır.
  • Gereksiz constructor kullanımını engeller.
  • Opsiyonel parametre yönetimini kolaylaştırır.

Dezavantajları:

  • Fazla sayıda küçük sınıf oluşabilir.
  • Basit yapılarda gereksiz kod fazlalığı yaratabilir.

Ne Gibi Projelerde Kullanılmalı?

  • Form verileri, JSON yapılandırmaları, API istekleri gibi karmaşık veri taşıyıcı nesnelerde.
  • Android AlertDialog, NotificationCompat.Builder gibi yapılarda Builder zaten kullanılır.

Örnek:
image

📝 Açıklama:
Bu kodda Builder Pattern kullanılıyor. UserBuilder sınıfı, adım adım parametreleri belirleyip en son build() fonksiyonuyla User nesnesini oluşturuyor. Çok fazla parametre olduğunda constructor karmaşasını önlemek ve kodun okunabilirliğini artırmak için tercih edilir.

🎯 Hangi Durumda Hangi Deseni Kullanmalı?

image

Tasarım desenleri, ihtiyaca uygun kullanıldığında kodun sürdürülebilirliğini ve test edilebilirliğini artırır. Önemli olan, her deseni amacına uygun yerde ve gerekliliğe göre tercih etmektir.

📌 Sonuç

Android projelerinde tasarım desenleri, yazılım mimarisinin sağlıklı ilerleyebilmesi için önemli araçlardır. Her deseni kullanım senaryosu ve avantaj-dezavantajlarıyla birlikte değerlendirmek gerekir. Gereksiz yere desen kullanmak, kodun karmaşıklaşmasına neden olabilir. Bu yüzden doğru desen, doğru iş için seçilmeli ve yerinde kullanılmalıdır.

Kodun okunabilirliği, bakımı ve geliştirilebilirliği için desenlere hâkim olmak, her geliştiricinin işini kolaylaştırır.

Umarım sizler için açıklayıcı bir makale olmuştur. Bir sonraki yazımda görüşmek üzere. Mutlu kodlamalar!

Go back