アダプターパターン
クラスが既にある状態で、それに手を加えずに実装を追加する方法
既存のクラスに手を加えないので、非破壊的な実装ができる
前提事項
- sayHelloの
こんにちは
の最後に、!
を付け足したい要望がきた場合 - 他の箇所でも使われているため、直接修正はできない
class Person { // 既存のクラス
func sayHello() -> String {
return "こんにちは"
}
}
アダプターパターンを使う(継承バージョン)
protocol ShoutProtocol {
func shout() -> String
}
class LoudVoicePerson : Person, ShoutProtocol {
func shout() -> String {
return super.sayHello() + "!"
}
}
let loudVoicePerson = LoudVoicePerson()
print(loudVoicePerson.shout())
これでできました。既存のクラスに影響がないため、安全です(リリース間際でも心配しなくてすみます)
ただ、個人的には継承を使うやり方はswiftらしくないと思っており、下記のextensionを使ったほうが好きです。
// extensionを使って、このように実行することも可能
extension Person : ShoutProtocol {
func shout() -> String {
return super.sayHello() + "!"
}
}