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.
Bu yazı yorumlara kapalı.