読者です 読者をやめる 読者になる 読者になる

swiftでデザインパターンを実装(Adapterパターン:継承)

今回はAdapterパターンを実装します

  • Adapterパターンとは?

    既存のクラスに対して修正を加えることなく、インタフェースを変更することができる。

    Wikioediaより引用

Adapterパターンは「継承」と「委譲」の2つの手法で実現できます。

今回は「継承」を用いた手法を実装してみます。

案件

登場人物

  • Adaptee(MizukiNana)
    • 水樹奈々さん。既存のクラス。今までどおり歌って、演技をしていきたい。
  • Target(KohakuProtocol)
    • 紅白歌合戦に出場するために実装しなければならないinterface。kohaku()が定義されている。
  • Adapter(NanaMizuki)

実装(Playground)

// Adaptee
class MizukiNana {
    func perform() {
        print("演技する")
    }
    func sing() {
        print("歌う")
    }
}

// Target
protocol KohakuProtocol {
    func kohaku()
}

// Adapter
class KohakuNana: MizukiNana, KohakuProtocol {
    
    override func perform() {
        print("普段の水樹奈々の演技")
    }
    
    func kohaku() {
        super.sing()
    }
}

let nana = KohakuNana()

nana.perform()
nana.kohaku()

結果

無事、奈々さんは普段通り演技もできて、紅白に出場するためのinterfaceを実装することができた。

感想

今回はkohaku()の中身がsing()をラッピングするだけの形になり、ただ単にメソッド名が変わっただけになった。 collaboWithNishikawa()みたいな他の機能も追加したくなった場合、どう実装していくのか調査していきたいです。