İçeriğe geç

Flyweight Pattern

Merhabalar bu yazımda tasarım kalıplarından performans odaklı Flyweight Pattern kullanımını öğrenmiş olacağız.

Tüm tasarım kalıplarının belli bir amacı ve ihtiyaçlardan doğmuş bir yapısı vardır. Flyweight tasarım kalıbıda tekrarlı gereksiz kullanımı önlemek ve kullanılan ram tüketimini azaltmak için tasarlanmıştır. Eğer gereksiz yere fazla şekilde kullanılan sınıf nesneleriniz varsa bu kalıbı kullanmak performansa doğru bir etki yapacaktır ancak nedensiz yere kullanmakta bir işe yaramayacaktır. Çünkü gereksiz kullanılan nesneler hafızada gereksiz yer kaplayacaktır.

Aşağıda yazdığım kodu inceleyerek olayı daha net anlayabilirsiniz.

protocol ShopingProtocol {
    var description:String {get set}
    var item:String {get set}
}


final class Shoping: ShopingProtocol {
    
    var description:String
    var item:String
    
    init(description:String,item:String) {
        self.description = description
        self.item = item
    }
    
}

class Todo {
    
    private var shopingList:[Int:Shoping] = [:]
    
    func add(item:String,description:String,index:Int) -> Shoping? {
        
        if shopingList.index(forKey: index) == nil {
            shopingList[index] = Shoping(description: description, item: item)
        }
        
        return shopingList[index]
    }
    
    func list() {
        for (key,value) in shopingList.enumerated() {
            print("\(key) -- \(value.value.item)")
        }
    }

}

let obj = Todo()

obj.add(item: "Süt", description: "Tam tağlı", index: 0)
obj.add(item: "Elma", description: "Yeşil", index: 1)
obj.add(item: "Çikolata", description: "Sütlü", index: 2)

let dd = obj.add(item: "Tuz", description: "Kaya", index: 1)
dd?.item // Elma

obj.list()

Burada yeniden ekleme işlemi yaptığınızda yeniden bir nesne yaratmaz eski nesneyi size döndürmektedir. Bu sınıflar hayal gücünüz ve modelinize göre tasarlanabilir ancak kalıbın mantığı bu şekildedir.

 

Tarih:Design PatternsiOS

Bu yazı yorumlara kapalı.

Copyright © 2020 Kenan Atmaca