この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
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 を付けても付けなくてもよい