0Pricing
Kotlin Academy · Ders

Uygulamalı Tasarım Kalıpları

Yetki devretmeyle dekoratörler

Uygulamalı Tasarım Kalıpları, CoddyKit'te ücretsiz bir Kotlin Academy dersidir. Bu, 4 dersinin 4. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Kotlin Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Kotlin Academy kursu toplamda 4 dersten oluşur.

Dekoratör Deseni

Bir dekoratör, aynı arayüzü korurken davranış eklemek için bir nesneyi sarmalar. Kotlin'in by anahtar sözcüğü dekoratörleri çok kolaylaştırır: her şeyi yönlendirin, geliştirdiğiniz bölümlerin üzerine yazın.

Temel Bir Bileşen

Basit bir veri kaynağıyla başlıyoruz. Dekoratörler bunu saracak.

interface DataSource {
    fun fetch(): String
}

class NetworkSource : DataSource {
    override fun fetch() = "raw-data"
}

fun main() {
    println(NetworkSource().fetch())
}

Günlükleme Dekoratörü

Dekoratör, sarmalanan kaynağa delegasyon yapar ve ilgilendiği call çevresine günlükleme ekler.

interface DataSource { fun fetch(): String }
class NetworkSource : DataSource { override fun fetch() = "raw-data" }

class LoggingSource(private val inner: DataSource) : DataSource by inner {
    override fun fetch(): String {
        println("fetching...")
        val result = inner.fetch()
        println("done")
        return result
    }
}

fun main() {
    println(LoggingSource(NetworkSource()).fetch())
}

Önbelleğe Alma Dekoratörü

Başka bir dekoratör, ilk sonucu önbelleğe alır; böylece yinelenen calls temel kaynağı atlar.

interface DataSource { fun fetch(): String }
class NetworkSource : DataSource { override fun fetch() = "raw-data" }

class CachingSource(private val inner: DataSource) : DataSource by inner {
    private var cached: String? = null
    override fun fetch(): String {
        return cached ?: inner.fetch().also { cached = it }
    }
}

fun main() {
    val s = CachingSource(NetworkSource())
    println(s.fetch())
    println(s.fetch()) // served from cache
}

Dekoratörleri Katmanlama

Her dekoratör kendisi de bir DataSource olduğu için bunları üst üste ekleyebilirsiniz. Sıra önemlidir: dıştaki, içtekini sarar.

interface DataSource { fun fetch(): String }
class NetworkSource : DataSource { override fun fetch() = "raw-data" }

class LoggingSource(private val inner: DataSource) : DataSource by inner {
    override fun fetch(): String { println("log"); return inner.fetch() }
}
class CachingSource(private val inner: DataSource) : DataSource by inner {
    private var c: String? = null
    override fun fetch() = c ?: inner.fetch().also { c = it }
}

fun main() {
    val s = LoggingSource(CachingSource(NetworkSource()))
    println(s.fetch())
    println(s.fetch())
}

Doğrulayan Bir Dekoratör

Dekoratörler girdileri de güvence altına alabilir. Burada bir dekoratör, gerçek işçiye delegasyon yapmadan önce doğrulama gerçekleştirir.

interface Processor { fun process(input: String): String }
class UpperProcessor : Processor { override fun process(input: String) = input.uppercase() }

class ValidatingProcessor(private val inner: Processor) : Processor by inner {
    override fun process(input: String): String {
        require(input.isNotBlank()) { "empty input" }
        return inner.process(input)
    }
}

fun main() {
    println(ValidatingProcessor(UpperProcessor()).process("hello"))
}

Salt Okunur Koleksiyon Sarmalayıcısı

Delegasyon, uyarlayıcı sarmalayıcıların oluşturulmasını kolaylaştırır. Burada bir listeyi sarıyor ve tüm liste işlemlerini yönlendirirken özel bir özet yöntemi ekliyoruz.

class SummarizedList(private val inner: List<Int>) : List<Int> by inner {
    fun total() = inner.sum()
}

fun main() {
    val list = SummarizedList(listOf(1, 2, 3))
    println(list.size)
    println(list.total())
}

Calls Sayma

Bir dekoratör, ölçümleri şeffaf biçimde izleyebilir; bu, gerçek uygulamaya dokunmadan izleme yapmak için kullanışlıdır.

interface Service { fun call(): String }
class RealService : Service { override fun call() = "ok" }

class CountingService(private val inner: Service) : Service by inner {
    var calls = 0
        private set
    override fun call(): String {
        calls++
        return inner.call()
    }
}

fun main() {
    val s = CountingService(RealService())
    s.call(); s.call()
    println(s.calls)
}

Delegasyonun Buradaki Üstünlüğü

Dekoratörleri kalıtımla oluşturmak, temel sınıfın open olmasını gerektirir ve her dekoratörü somut bir sınıfa bağlar. Delegasyon yalnızca arayüze bağlı olduğundan dekoratörler gevşek bağımlı ve birleştirilebilir kalır.

Kalıp Kontrol Listesi

Delegasyon dekoratörü oluşturmak için:

  • Sarmalanan nesneyi private val olarak alınız
  • Arayüze by ile delegasyon yapınız
  • Yalnızca geliştirdiğiniz üyelerin üzerine yazınız
  • Üzerine yazılan bölümün içinde iç nesneyi çağırınız

Bir Araya Getirme

Dekoratörler, uyarlayıcılar ve vekiller sınıf delegasyonundan doğal olarak ortaya çıkar. Küçük arayüzlerle birleştirildiklerinde esnek, katmanlı, test edilmesi ve genişletilmesi kolay sistemler kurmanızı sağlarlar.

Hızlı Kontrol

Pratik delegasyon kalıpları konusundaki anlayışınızı sınayınız.

Özet

Delegasyonla pratik dekoratörler oluşturdunuz:

  • Günlükleme, önbelleğe alma, doğrulama ve sayma sarmalayıcıları
  • Her dekoratör aynı arayüzü taşıdığı için dekoratörleri üst üste ekleme
  • Yalnızca geliştirilen üyelerin üzerine yazma, geri kalanını yönlendirme

Bu, sınıf delegasyonu kursunu tamamlar.

Sıkça Sorulan Sorular

“Uygulamalı Tasarım Kalıpları” dersi ücretsiz mi?

Evet — “Uygulamalı Tasarım Kalıpları” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Kotlin Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Kotlin Academy kursu toplamda 4 dersten oluşur.

“Uygulamalı Tasarım Kalıpları” dersinde ne öğreneceğim?

Yetki devretmeyle dekoratörler Kotlin Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

Kotlin Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te Kotlin Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 4. dersidir.

“Uygulamalı Tasarım Kalıpları” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu Kotlin Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her Kotlin Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. by Anahtar Sözcüğü
  2. Üyelere Yetki Devretme
  3. Yetki Devretme ve Kalıtım
  4. Uygulamalı Tasarım Kalıpları
← Kotlin Academy Sayfasına Dön