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

kanetaiの二次記憶装置

プログラミングに関するやってみた、調べた系のものをQitaに移して、それ以外をはてブでやる運用にしようと思います。http://qiita.com/kanetai

Adapterパターン

Swift デザインパターン

https://ja.wikipedia.org/wiki/Adapter_%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3

既存のクラスに修正を加えることなくインターフェースを変更するラッパー.

f:id:kanetai:20150906162826p:plain

swiftで実装するには?

クラス図どおり実装するだけだが、Objective-CSwiftには言語機能として既存のクラスを拡張できる機能があるので、Adapterクラスの実装は必要ない。

Apple Swift version 1.2 (swiftlang-602.0.53.1 clang-602.0.53)
Target: x86_64-apple-darwin14.5.0
class Adaptee1 { func oldMethod1() { println("[\(__FUNCTION__)]") } }
class Adaptee2 { func oldMethod2() { println("(\(__FUNCTION__))") } }

protocol Target { func requiredMethod() }
extension Adaptee1 : Target { func requiredMethod() { self.oldMethod1() } }
extension Adaptee2 : Target { func requiredMethod() { self.oldMethod2() } }

for t: Target in [Adaptee1(), Adaptee2()] {
    t.requiredMethod()
}