Swift デコレータパターン


デコレータパターン

The Decorator(デコレータ)とはデザインパターンの一つ。
既存のクラスに存在しなかった追加機能を実装するために用いる。クラス内のゴニョゴニョせずに追加機能を実装できるデザインパターンと覚えれば良さげ、、

extension

extensionがあるから必要なくない?
よくextensionをつかって関数を作成したり、Delegateパターンを追加するのが王道な気がする。。
可読性も上がるし、実際僕自身もたくさん使用する。
ただ、既存のクラスをあくまで拡張するのがextensionなのでoverrideはできないし、ストアドプロパティをゴニョゴニョすることはできない。

例コード

// 全ての親クラス
class Living {
    func bark() -> String {
        return "live"
    }
}

// 動物クラス
class Animal: Living {
    override func bark() -> String {
        return "animal"
    }
}

// 各動物の種類の親クラス
class Kind: Living {
    let living: Living

    init(living: Living) {
        self.living = living
    }
}

//🐩クラス
class Dog: Kind {
    override func bark() ->String {
        return "wanwan"
    }
}