今回はAdapterパターンについて書いていきます。
デザインパターンとは
デザインパターンとはソフトウェア開発の設計方法の事です。
『オブジェクト指向における再利用のためのデザインパターン』という本が出典で、全部で23種類のパターンが紹介されています。
Adapterパターンとは
Adapterパターンとは複数のクラスに共通インターフェイスを持たせるパターンです。
既存のクラスに手を加えずに実装を追加するような形になるのでライブラリの修正には良さそうです。
SwiftでのAdapterパターンの実装方法
継承を利用した方法
例としてTarget
というクラスがあり、そのクラスを修正したくないけどmethod2
を実装したいパターンを考えます。
更にmethod2
はTarget
のmethod1
を呼び出す実装だと仮定します。
その場合はTarget
クラスのサブクラスを作ってそれにmethod2
を追加すれば当初の想定は満たせそうです。
実装は下のとおりになります。
protocol MyProtocol { func method2() } class Target { func method1() { print(1) } } class Adapter: Target, MyProtocol { func method2() { super.method1() } } let a = Adapter() a.method2()
委譲を利用した方法
継承でなく委譲を使う場合は下のようになります。
Adapter
がインスタンス変数としてTarget
を持つことでmethod1
を内部で呼び出せています。
protocol MyProtocol { func method2() } class Target { func method1() { print(1) } } class Adapter: MyProtocol { let target = Target() func method2() { target.method1() } } let a = Adapter() a.method2()
Swiftの機能を使って似た事を行う
Swift
では既存クラスにプロトコルやメソッドを追加するので、Adapter
を作らずに同等の事を実装できます。
実装方法は下の通りです、エクステンションを使ってTarget
にmethod2
を追加しています。
protocol MyProtocol { func method2() } class Target { func method1() { print(1) } } extension Target: MyProtocol { func method2() { method1() } } let t = Target() t.method2()
- 作者: エリックガンマ,ラルフジョンソン,リチャードヘルム,ジョンブリシディース,Erich Gamma,Ralph Johnson,Richard Helm,John Vlissides,本位田真一,吉田和樹
- 出版社/メーカー: ソフトバンククリエイティブ
- 発売日: 1999/10
- メディア: 単行本
- 購入: 21人 クリック: 711回
- この商品を含むブログ (210件) を見る