気になる技術的なことについて少しずつ書いていけたらと思っております。ジャーナルと戯れています。リファクタリングしたコードがまたリファクタリングが必要なくらい汚くなってきたので、リファクタリングしようか考え中。自分の研究を引き継いでくれる人が今のところ居ないんだよな~。今回はデザインパターンについての振り返りです。次の回ではデザインパターンを終わりにしようと思っています。デザインパターン」を参考にしながら書いています。今回は振り返りということで本で紹介された(最後の章で軽く紹介しているパターンは除く)について一覧して記述していきたいと思います。復習ということなので、自分の言葉でデザインパターンについて書くので間違ったことを書いていたらすみません。StrategyStrategyパターンはinterfaceを通して作った複数のクラスを入れ替えることで動作に柔軟をもたせるパターンです。}}Observerこのパターンは、監視者(Observer)と被監視側(Subject)が存在しており、Subjectの変更をObserverが知ることで特定の処理を実行します。特定の処理をした結果を画面に表示させる、といった場合に使ったりします。注意として「Subjectの方がObserverに対して通知をする必要がある」、ということです。他にもイベントリスナーを登録している、といえばピンとくる人もいるかも?監視者というからにSubjectの状態が変わったら自動的に動作して欲しい!、と思うでしょうがプログラミング言語はそこまで人間の意図を汲み取ってくれません。:-)ちなみにこのパターンはJavaの組み込みクラス(java.util.Observer/Observable)で事前に定義されてます!詳しくは公式リファレンスを参照してください。setChangeは状態が変わったことを示す関数です。これが呼び出されないとObserverに通知をしても動作しません。上記のsetChangeとセットで呼び出します。}}DecoratorDecoratorは特定の処理に上乗せして処理を付け加えたいときに使うパターンです。メソッドを追加するのと違う点は、機能の拡張か新規追加という点で異なります。異なるinterfaceのものをDecoratorで機能追加するという事は意図が変わってしまいますね。ちなみに、JavaではInputStreamやOutputStreamなどの拡張にDecoratorが使わています。話は変わるが、torとterってなんで違うんだろうって調べたらこんなの出てきた。*/}FactoryFactoryはクラスのインスタンスを一元管理してくれるありがたいパターンだ。このパターンを使えば、Strategyパターンでインスタンス生成時に動的に処理を変更したい時に役に立つ。先ほどの上のコードでもif(type==X)となっている部分を抜き出していあげれば、インスタンスの生成に関しての処理を切り出すことが可能になる。単純にインスタンスの生成だけを肩代わりするなら、パターンというよりはイディオムである。FactoryにはFactoryMethodとAbstractFactoryが存在する。FactoryMethodとAbstratFactoryの違いですが、どのようなインスタンスを生成するかの詳細を知っているか、知っていないかの違いである。例でも紹介したが、ピザがあるとしてFactoryMethodが生成するピザ(チーズ、野菜、ペパロニ、etc)についてを知っている。逆にAbstractFactoryはピザ自身がどのような素材が必要かについて知っています。これは、それを生成する側が主体になっているか、生成される側が主体になっているか、の違いです。下はFactoryMethodのソースコードです。Factoryがピザの具体的な型を知っていることが分かります。}}こちらがAbstractFactoryのソースコードです。FactoryMethodと違い、どのようなピザを作るかの詳細(どの地方に向けたピザか)を知っているのはピザ自身です。}}AbstractFactoryはインスタンスの生成工程を行うのがインスタンス化を行いたい基底クラスです。AbstractFactoryはPizzaクラスの中でFactoryMethodが行われているということになります。Singletonシングルトンパターンはプログラムのプロセスでインスタンスがひとつのみ存在することを保証してくれるパターンです。シングルトンはクラスフィールドとメソッドを使用して実装するので、グローバルにアクセスが可能になります。グローバルなことにより、インスタンスが永続して残るのでテストが難しくなるという副作用も抱えています。}}おわりに本を再度読みなおしてもう一度理解を深めていけたので良かった。DecoratorとFactoryについては大分忘れていた部分もあったので、色々と思い出す事が出来た。次回でデザインパターンは終わりにしたいので、頑張って行きたい。03:09【デザインパターン】デザインパターンの振り返り【前篇】Tweet広告を非表示にする関連記事2014-12-26【デザインパターン】デザインパターンの振り返り【後篇】どうも、こんばんわ。研究とプライベートで予定も中々ヒートアップしてまいりました。デザインパターン...2014-10-11【デザインパターン】コンパウンドパターン【事前学習編1】どうも、昨日見事にブログを書き忘れていました。React・Reduxの導入からサーバーサイドレンダリングによるUXの向上まで【書評】現場で役立つシステム設計の原則~変更を楽で安全にするオブジェクト指向の実践技法isucon9予選で赤い彗星になれず予選落ちしました月別アーカイブ参加グループ焼き肉ブログはてなブログをはじめよう!dorivenさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。