[iOS 8] Swiftでデザインパターン No.3 Adapter – 委譲
Adapter
Adapter パターンは、既存クラスを修正することなく、異なるインタフェースを持たせるためのパターンです。
今回は委譲を利用した方法で実装します。
前回はこちら。
クラス図
ポイント
- Adapter は Adaptee のインスタンスをメンバ変数として持っている
- Adapter の requiredMethod() の中身は、メンバ変数 adaptee の oldMethod() 呼び出し
- adaptee に処理を委譲している
サンプルコード
Target
class Target { func requiredMethod() { fatalError("must be overridden") } }
今回 Target はプロトコルではなく、抽象クラスです。
Adaptee
class Adaptee { func oldMethod() { println(__FUNCTION__) } }
こちらは変わらず。
Adapter
class Adapter: Target { private let adaptee = Adaptee() override func requiredMethod() { adaptee.oldMethod() } }
Adapter は、メンバ変数として Adaptee のインスタンスを持ちます。
requiredMethod() の中身は、adaptee に処理を委譲して oldMethod() を呼び出しているだけです。
adaptee.oldMethod() は self.adaptee.oldMethod() とも書けます。
(私は今のところ self を付けない方向で行こうと思っています。)
実行
Adapter().requiredMethod()
実行結果
oldMethod()
まとめ
- メンバ変数にアクセスするときは、self を付けても付けなくてもよい