İçeriğe geç

Decorator Pattern

Merhabalar bu yazımda İOS ile Tasarım kalıpları serisine Decorator Pattern ile devam ediyoruz.

Decorator tasarım kalıbı nesneye kalıtıma gerek kalmadan dinamik olarak eklemeler yapmamıza olanak veren bir kalıptır. Oluşturduğumuz sınıfın Decorator sınıflarını oluşturarak sınıfa yeni özellikler veya var olan özelliklere eklemeler yapabilmekteyiz. Üstelik bu işlemi alt sınıflar oluşturmamıza gerek kalmadan sağlarız.

Aşağıda yazdığım örneği incelerseniz olayı daha iyi anlamış olacaksınız.

protocol carProtocol {
    var getSpeed:Double {get}
    func getDetails() -> String
}


class Car: carProtocol {
    
    var name:String
    var model:String
    var year:Int

    
   init(name:String,model:String,year:Int) {
    self.name = name
    self.model = model
    self.year = year
    }
    
    
    var getSpeed: Double {
        return 20.0
    }
    
    
    func getDetails() -> String {
        return "\(name) \(model) \(year)"
    }
    
}


class CarDecorator:carProtocol {
    
    private let decorator:carProtocol
    
    init(car:carProtocol) {
        self.decorator = car
    }
    
    var getSpeed: Double {
        return decorator.getSpeed + 10.0
    }
    
    var abs:Bool {
        return true
    }
    
    var ebs:Bool {
        return true
    }
    
    func getDetails() -> String {
        return "\(decorator.getDetails()) -- Decorator"
    }
    
    
}


let carObject = Car(name: "Opel", model: "Astra", year: 2017)
carObject.getDetails()
carObject.getSpeed // 20

let carDeco = CarDecorator(car: carObject)
carDeco.getSpeed // 30
carDeco.abs

Bu örnekte gördüğünüz gibi Decorator sınıfı sadece Car sınıfına bağlı protokolü referans olarak işlem yapmakta. Bu sayede Car sınıfında yazılmış değişken ve fonksiyonlara erişebilir ve genişletmeler yapabiliriz. Veya farklı decoratorlar yazarak aynı şekilde referans gönderip farklı işlemler yaptırabiliriz.

Tarih:Design PatternsiOS

Bu yazı yorumlara kapalı.

Copyright © 2021 Kenan Atmaca