気になる技術的なことについて少しずつ書いていけたらと思っております。2014-11-08【デザインパターン】ビルダーパターン研究のスライド作ってたら26時で焦って書き始めました。デザインパターン」を参考にしながら書いています。こいつを参考にデザインパターンについて書いていくよ!※ただし、Builderパターンについては軽く触れる程度しか載っていませんBuilderパターンとは?インスタンスの生成時に必要な情報を、与えられたコンテキストによって肩代わりしてくれるデザインパターンです。「インスタンスの生成を補助してくれるとかFactoryパターンと似てないか?」と感じた方も多いと思いますが、Factoryはインスタンスの生成に関して全てを秘匿します。どのインスタンスを作りたいか指定した関数を呼び出すだけで必要なインスタンスが生成され、生成時にどのようなパラメタ(コンストラクタ引数)が渡されるかを知る必要はありません。Builderパターンはインスタンスの生成は秘匿されていますが、どのようなパラメタが渡されるかを知っている必要性があります。それによってパラメタを柔軟に変えられるため、コンストラクタに多数の引数が必要であったり、動的に引数の数が変わる場合(オプションが存在する場合)に力を発揮することが出来ます。いつもどおりWikipedia大先生ではどう解釈しているのでしょうか?オブジェクトの生成過程を抽象化することによって、動的なオブジェクトの生成を可能にする。非常にシンプルですね。「動的」なオブジェクト生成ってところが味噌だと思います。Builderパターンのメリット複雑なオブジェクトの構築方法をカプセルできる複数の変化するプロセスで、オブジェクトを構築できます(オプション機能)製品の内部表現をカプセル化することもできるクライアントには中小インタフェースしか見えないため、交換が容易になるBuilderパターンのデメリットいいことばかりではなく、使い方を誤ると力を発揮できないパターンです。インスタンスの生成を抽象化してくれるFactoryパターンとよく比較されます。シンプルな構造のインスタンス生成に適応しても、意味がなく工数が増えてしまうどのような情報を渡す必要性があるのか、ということをクライアント側が知っていなくてはならない*1Factoryパターンとの使い分けをしっかりと意識する必要性がありそうですね。具体的な例あたたはオブジェクト町の郊外にある新しいテーマパーク「パターンズランド」の休暇プランナの構築を依頼されています。テーマパークのゲストは、ホテルやさまざまなタイプの入場券を選んだり、レストランや特別なイベントの予約をしたりすることができます。休暇プランナを作成するためには、以下のような構造の作成を可能にしなければいけません。Directorはもちろんオブジェクトの使用者なので「あなた」、ConcreteBuilderは「休暇プランナを作成するため」のもの、ということなります。実際にBuilderパターンがどのように使われるかを見て行きましょう。※コードがほとんど載っていないため、かなりの憶測で書いていますまずは抽象的なBuilderパターンを書いてきましょう。ある日付について、ホテル、食事、イベント、チケットについてのオプションを裁く関数を用意しています。getVacationPlanner();}予約対象のリストを保持するだけのクラスです。それでは、このインタフェースを元にして具体的な動作を定義していきましょう。Planner(this);}}ここで重要なのはadd~というメソッドではインスタンス自身を返している点です。getVacationPlanner()でBuildしたい対象のインスタンスを自身を引数に渡して返すようにしています。することで、インスタンス生成に関しての手法を隠蔽することが出来ます。これを実際に使ってみましょう。本来はここにBuilderを追加します。することでbuilderの情報にアクセス出来るようになるからです。VacationBuilder{...}}HotelReserverとかはReserverインターフェースを作成して予約などを行ってくれるクラスを想定しています(勝手に憶測で作ったクラスなので参考にはしないでね)Directorがどのようにインスタンスを生成するかを伝達し(結婚式場でいう受付みたいな感じですね)必要なオブジェクトを渡してくれます。することで、動的にPlannerのインスタンスを生成させることが出来るようになっています。すみません、ちょっと駆け足になってしまいましたが今日はこのへんでおしまいにしたいと思います。最後まで読んでいただきありがとうございました。ジャーナルと戯れています。デザインパターン...2014-10-11【デザインパターン】コンパウンドパターン【事前学習編1】どうも、昨日見事にブログを書き忘れていました。React・Reduxの導入からサーバーサイドレンダリングによるUXの向上まで【書評】現場で役立つシステム設計の原則~変更を楽で安全にするオブジェクト指向の実践技法isucon9予選で赤い彗星になれず予選落ちしました月別アーカイブ参加グループ焼き肉ブログはてなブログをはじめよう!dorivenさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。