裝飾模式是一種結構型設計模式, 允許你通過將對象放入包含行為的特殊封裝對象中來為原對象綁定新的行為猪瞬。
裝飾器模式在別的語言里搞的云里霧里掏熬,在swift里就很簡單召庞,因為swift有extension和protocol extension驱闷,可以很輕松的給已有對象添加功能逆害。protocol extension可以給協(xié)議添加默認實現(xiàn)往果,這讓協(xié)議甚至可以代替繼承筑公,所以swift變成所謂的面向協(xié)議編程的語言。
class Student: NSObject {
//座右銘
func maxim(){
print("我是個學生孽水,我每天都要學習檬输,我要為自己代言")
}
}
extension Student{
func examine() {
self.maxim()
print("考試分數(shù)出來了,我考100分匈棘,我是個好學生")
}
}
extension Student{
func studyHard(){
self.examine()
print("上次沒考好丧慈,被當成了壞學生,現(xiàn)在我要好好學習,下次考一百分")
}
}
我們有個學生類逃默,只有一個maxim方法鹃愤,現(xiàn)在我們通過extension給他擴展兩個方法examine、studyHard完域,這樣裝飾以后软吐,學生類的功能就更豐富了∫魉埃‘
協(xié)議擴展讓協(xié)議可以有一個默認實現(xiàn)凹耙,這樣遵守這個協(xié)議的類都可以有默認功能:
protocol Student {
func maxim()
}
extension Student{
func maxim() {
print("我是個學生,我每天都要學習肠仪,我要為自己代言")
}
}
class GoodStudent: Student {
func studyHard() {
self.maxim()
print("考試分數(shù)出來了肖抱,我考100分,我是個好學生")
}
}
這樣就算GoodStudent不實現(xiàn)maxim方法异旧,它也會有這樣的功能意述,可以不使用繼承達到復用代碼的目的。