今回はPrototypeパターンについて書いていきます。
デザインパターンとは
デザインパターンとはソフトウェア開発の設計方法の事です。
『オブジェクト指向における再利用のためのデザインパターン』という本が出典で、全部で23種類のパターンが紹介されています。
Prototype パターンとは
Prototype パターンとはインスタンスの生成に関するパターンです。
インスタンスを生成するのでなく、既存のインスタンスのコピーを生成する事でインスタンス生成コストを減らすパターンです。
SwiftでのPrototype パターンの実装方法
SwiftでのPrototype パターンは下のように記述します。
まずはCopy可能なプロトコルCopyable
を実装、その後それに準拠したクラスを作成します。
そしてそれらのインスタンスのコピーを返すCopyFactory
を作成します。
class CopyFactory { var map: [String: Copyable] = [:] init() { self.register("clone1", instance: Clone1()) self.register("clone2", instance: Clone2()) } func register(key: String, instance: Copyable) { map[key] = instance } func copy(key: String) -> Copyable { return map[key]! } } protocol Copyable { func clone() -> Copyable } class Clone1: Copyable { var value = 1 func clone() -> Copyable { let clone = Clone1() clone.value = self.value return clone } } class Clone2: Copyable { var value = 2 func clone() -> Copyable { let clone = Clone2() clone.value = self.value return clone } }
使い方は下の通りです。
CopyFactory
のインスタンスを生成して、それに対してコピー取得メソッドを送る事でコピーを取得しています。
let factory = CopyFactory() let clone1 = factory.copy("clone1") as! Clone1 let clone2 = factory.copy("clone2") as! Clone2 print(clone1.value) // → 1 print(clone2.value) // → 2
Prototype パターンの長所・使いどころ
Prototype パターンはインスタンスの大量生成をする時に役立ってきます。
特にプロパティーのセットをする処理が重い際などは効果を発揮します。
- 作者: エリックガンマ,ラルフジョンソン,リチャードヘルム,ジョンブリシディース,Erich Gamma,Ralph Johnson,Richard Helm,John Vlissides,本位田真一,吉田和樹
- 出版社/メーカー: ソフトバンククリエイティブ
- 発売日: 1999/10
- メディア: 単行本
- 購入: 21人 クリック: 711回
- この商品を含むブログ (210件) を見る