Swift Delegation Pattern

Aşağıdaki yazı yakında çıkacak olan kitabımdan bir alıntıdır izinsiz kopyalanıp, kullanılamaz.

Bu patern bir nesnenin yerine getirmesi gereken bir görevi kendisi yapmak yerine başka bir nesneye -delege ederek- görevi delege ettiği nesneye yaptırmasını tematize eder. Başka bir deyişle, nesne söz konusu görevi farklı bir nesnenin yardımıyla gerçekleştirir.

Bu patern’in implementasyonunda anahtar nokta delege eden ve edilenin aynı protokolü (interface’i) desteklemesidir. Ayrıca delege eden bu protokol türünde bir nesne referansı (property) içermelidir. Bu sayede o property’e atanacak olan nesneye görev delege edilmiş olur.

swift delegation patern uml diagram

swift delegation patern uml diagram

Şekil 6.1’deki UML diyagramında görülen C sınıfı, Task() isimli fonksiyonla sembolize edilen görevi A veya B’den yardım alarak (A veya B türündeki bir nesneye delege ederek) gerçekleştirecektir. Bu karar, ToDelegation() isimli fonksiyona gönderilen parametrenin polimorfik şekildeki kullanımına dayandırılmıştır. Yani ToDelegation() isimli fonksiyona A veya B türünde bir nesne parametre olarak geçilmekte ve görev o nesneye delege edilmektedir.

protocol Delegation

{

func Task()

}

class A : Delegation

{

func Task()

{

print(“Görevi A nesnesi gerçekleştirdi”)

}

}

class B : Delegation

{

func Task()

{

print(“Görevi B nesnesi gerçekleştirdi”)

}

}

class C : Delegation

{

var delegate:Delegation?

func ToDelegation(delegate:Delegation)

{

self.delegate = delegate

}

func Task()

{

self.delegate!.Task()

}

}

////// TEST ///////

var c = C()

// A’ya delege et

c.ToDelegation(A())

c.Task()

// B’ye delege et

c.ToDelegation(B())

c.Task()

Çıktı:

Görevi A nesnesi gerçekleştirdi

Görevi B nesnesi gerçekleştirdi

Reklamlar