İçeriğe geç

Composite Pattern

Merhabalar bu yazımda İOS ile Composite Pattern nasıl kullanırız bunu görmüş olacağız.

Tasarım kalıplarından diğer biride Composite tasarım kalıbıdır. Bu tasarım kalıbı aynı içeriğe sahip farklı nesneleri tek sınıfta birlikte işlem yaptırmak ve kullanmak amaçlanır.

Bu diyagramda olay çok güzel bir şekilde açıklanmış. Aşağıda yazdığım örnek üzerinden anlatırsam olayı daha iyi anlayacağınızdan eminim.

protocol Shape { // #Component

    func draw()
}


class Square: Shape { // #Leaf
    
    var color:String
    
    init(_ color:String) {
        self.color = color
    }
    
    var width: CGFloat {
        return 100.0
    }
    
    var height: CGFloat {
        return 100.0
    }
    
    func draw() {
        print("Draw color:{\(color)}")
    }
    
    
}


class Oval: Shape { // #Leaf
    
    var color:String
    
    init(_ color:String) {
        self.color = color
    }
    
    var width: CGFloat {
        return 100.0
    }
    
    var height: CGFloat {
        return 100.0
    }
    
    func draw() {
        print("Draw color:{\(color)}")
    }

}


class Composite: Shape { // #Composite
    
    private var list:[Shape] = []
    
    init(_ elements:Shape...) {
        list = elements
    }
    
    func pushLeaf(_ item:Shape) {
        list.append(item)
    }
    
    func popLeaf() {
        list.removeLast()
    }
    
    var count:Int {
        return list.count
    }
    
    func draw() {
        for item in list {
            item.draw()
        }
    }
    
}

let obj = Composite(Square("#eee"),Square("#ffffff"),Oval("#f6f6f6"))
obj.pushLeaf(Square("#000000"))
obj.count // 4

obj.draw()

Bu örnekte soyut olarak component işlemimizi protokol üzerinden görmekteyiz. Burada bulunacak nesneler ve eylemler eklenir ve bu eylemlerin kullanılacağı leaf sınıflar yaratılır. Ben örneğimde Kutu ve Oval nesne olarak modelledim. Bu ister yönetici ister çalışan şeklindede modellenebilir. Composite sınıfında ise bu componente bağlı nesneleri alıp birlikte işlem yaptırmaktayız. Dilerseniz component protokolune bağlı farklı nesneler yaratıp composite sınıfında birleştirebilirsiniz.

Tarih:Design PatternsiOS

Bu yazı yorumlara kapalı.

Copyright © 2020 Kenan Atmaca