今回はBuilderパターンについて書いていきます。
デザインパターンとは
デザインパターンとはソフトウェア開発の設計方法の事です。
『オブジェクト指向における再利用のためのデザインパターン』という本が出典で、全部で23種類のパターンが紹介されています。
Builderパターンとは
Builderパターンとはインスタンスの生成を抽象化するデザインパターンです。
インスタンスの生成を担うBuilder
を切り替える事でクライアントは生成処理を考えずにいる事ができます。
SwiftでのBuilderパターンの実装方法
BuilderパターンではDirector
・Builder
・Product
の3つの役割が出てきます。
Product
は最終的にインスタンスを生成したいクラスです。
Builder
はインスタンス生成処理を行うクラスです。
Director
はBuilder
を使ってProduct
を使う役割になります。
実際の実装は下の通りです。
Director
にMyBuilder1
を渡した場合とMyBuilder2
を渡した場合で結果が異なる事が分かるかと思います。
class Director { var builder: Builder init(builder: Builder) { self.builder = builder } func construct() { builder.buildeName("Name") builder.buildeDescription("Description") } } protocol Builder { func result() -> Product func buildeName(name: String) func buildeDescription(descirption: String) } class MyBuilder1: Builder { private let product = Product() func buildeName(name: String) { product.name = name } func buildeDescription(descirption: String) { product.description = descirption } func result() -> Product { return product } } class MyBuilder2: Builder { private let product = Product() func buildeName(name: String) { product.name = "\(name) by builder2" } func buildeDescription(descirption: String) { product.description = "\(descirption) by builder2" } func result() -> Product { return product } } class Product { var name: String! var description: String! } let director1 = Director(builder: MyBuilder1()) let director2 = Director(builder: MyBuilder2()) director1.construct() director2.construct() println(director1.builder.result().name) // → Name println(director2.builder.result().name) // → Name by builder2
- 作者: エリックガンマ,ラルフジョンソン,リチャードヘルム,ジョンブリシディース,Erich Gamma,Ralph Johnson,Richard Helm,John Vlissides,本位田真一,吉田和樹
- 出版社/メーカー: ソフトバンククリエイティブ
- 発売日: 1999/10
- メディア: 単行本
- 購入: 21人 クリック: 711回
- この商品を含むブログ (210件) を見る