[iOS 8] Swiftでデザインパターン No.3 Adapter – 継承

2014.10.16

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

Adapter

Adapter とは

英単語 Adapt には以下のような意味があります。

  • 適合させる
  • あてはめる

Adapter パターンは、既存クラスを修正することなく、異なるインタフェースを持たせるためのパターンです。

Adapter パターンには、継承を利用した方法と委譲を利用した方法が存在します。
今回は継承を利用した方法で実装します。

クラス図

Adapter-inheritance

ポイント

  • Adapter は Adaptee を継承している
  • Adapter の requiredMethod() の中身は、スーパークラスの oldMethod() 呼び出し

サンプルコード

Target

protocol Target {
    func requiredMethod()
}

インターフェースはプロトコルとして実装します。
プロトコルの記述はこんな感じです。

Adaptee

class Adaptee {
    func oldMethod() {
        println(__FUNCTION__)
    }
}

println(__FUNCTION__) で、メソッド名を出力できます。

Adapter

class Adapter: Adaptee, Target {
    func requiredMethod() {
        super.oldMethod()
    }
}

プロトコルの採用は、継承するクラスの後にカンマで区切って記述します。
requiredMethod() の中身は、継承元のクラスが持つ oldMethod() を呼び出しているだけです。

実行

Adapter().requiredMethod()

実行結果

oldMethod()

まとめ

  • プロトコルの採用方法は、カンマの後にプロトコル名(スーパークラスが存在しなければコロンのすぐ後)
  • __FUNCTION__ マクロはメソッド名を表す

次回は委譲を利用した Adapter パターンを実装します。