GoF patternləri Android-də
Müsahibədə pattern tərifini əzbər demək yox, Android-də harada rastlaşdığını göstərmək qiymətləndirilir:
- Singleton — tək instansiya: Kotlin-də
object, DI-da@Singleton. Retrofit, Room instansiyaları. - Builder — mürəkkəb obyektin addım-addım qurulması:
OkHttpClient.Builder(),NotificationCompat.Builder,AlertDialog.Builder. Kotlin-də named/default arqumentlər çox halda əvəz edir. - Factory — yaratma məntiqinin gizlədilməsi:
ViewModelProvider.Factory,Fragment.instantiate. - Observer — hadisəyə abunəlik: LiveData/Flow, listener-lər, BroadcastReceiver.
- Adapter — uyğun olmayan interfeyslərin "tərcüməsi":
RecyclerView.Adapter(data ↔ view holder). - Facade — mürəkkəb altsistemə sadə üz: Repository pattern məhz budur.
- Strategy — dəyişdirilə bilən alqoritm: interceptor zənciri, image loader konfiqurasiyaları.
- Decorator — davranışın üstünə əlavə: OkHttp interceptor-ları sorğunu "bəzəyir".
| Pattern | Android-də nümunə | Bir cümlə mahiyyət |
|---|---|---|
| Singleton | `object`, Retrofit instansiyası | Tək instansiya, qlobal giriş |
| Builder | OkHttpClient.Builder | Mürəkkəb obyekti addım-addım qur |
| Observer | Flow/LiveData collect/observe | Dəyişikliyə abunə ol |
| Adapter | RecyclerView.Adapter | İki uyğunsuz interfeysi calaşdır |
| Facade | Repository | Mürəkkəbliyə sadə qapı |
| Decorator | OkHttp Interceptor | Davranışı sarıyaraq genişləndir |
Singleton-un tənqidi də soruşulur: qlobal mutable state, gizli asılılıqlar, testdə əvəzlənməzlik. Müasir cavab: singleton DI konteynerində scope kimi idarə olunmalıdır (@Singleton), object-in içində state saxlamaq yox. "Singleton antipattern-dirmi?" sualına balanslı cavab: pattern deyil istifadəsi problemdir — stateless util üçün object normaldır, mutable qlobal state üçün yox.
🛠 Tapşırıq
Android SDK-da pattern ovu: 6 pattern seç və hər biri üçün SDK-dan real nümunə tap (kodda Ctrl+B ilə mənbəyə keç).
OkHttpClient.Builder,RecyclerView.Adapter,ViewModelProvider.Factory, Flow/LiveData, Repository, Interceptor.- Sonra öz layihəndə bir Strategy tətbiq et: interfeys + iki implementasiya + DI ilə seçim.
Bitdi sayılır: hər pattern üçün "niyə məhz burada bu pattern" cavabın varsa.
📚 Mənbələr və sənədlər
- OkHttp Interceptors (Decorator/Strategy nümunəsi)rəsmilysine.dev
- ViewModelProvider.Factoryrəsmideveloper.android.com