気になる技術的なことについて少しずつ書いていけたらと思っております。現在、内定者でチームを組んでサービスを作っているのですが、やはりサービスを考えて作るというのは面白いです。自分たちが見たいものばかりに目を向けていると残念な仕上がりになってしまうので、そこら辺は実際に触ってみて色々と深堀りしていければと思います。デザインパターン」を参考にしながら書いています。datchの日記)はガムボールマシーンという、状態遷移表が定義された機械のソースコードを書いていきました。Stateパターンを用いずに状態毎に異なる状態への遷移に対してのアクションをすべて定義しようとすると、状態がひとつ増えるごとにクラスが大きくなっているのがわかりました。Stateパターンさて、ガムボールマシンをStateパターンで記述する前に、どのようなパターンか確認してみる。引用したクラス図と状態遷移図を元にして、今回のガムボールマシンで例えてみる。Stateパターンには以下の3つのクラスが存在する。複数のStateを保有するクラス。複数の状態を持つオブジェクトを指します。これをガムボールマシンの例に置き換えてみる。DipenseGumball以上のように対応している。このように状態遷移図のそれぞれの状態に対して、ConcreteStateを割り当てていく。Context側で管理、運用するConcreteStateが受け取った命令を取得するConcreateStateがContextの中で変わることで、その振る舞い(状態による動作の違い)も変えられるという便利なパターンですね。̄なんと、取り締まり役が「10人に1人当たり」という仕様を追加してくれ、という要望が来ました。以前のStateパターンを知らない状態だったら、GumballMachineクラスが肥大化している所でした。ところが今はStateパターンという武器を知っているので柔軟に問題に対応できるとではStateパターンを使ってガムボールマシンを書いていきましょう。ContextのGumballMachineから。setterなど}ソースコードを見ての通り、Contextは複数の状態を持てるのが見えると思います。どこで状態を遷移させるのかというと、Stateクラスの中で状態遷移を行います。インターフェースのStateクラスをみていきます。dispense();}それぞれのrequest()を定義したので、あとはこれをクラスが継承して具象クラスを定義してあげるだけです。dispnece(){System.out.println("まずは支払いをする必要があります");}}insertQuarter()の処理に注目してみましょう。お金を入れてない状態ではお金を入れる動作以外は受け付けないようになっています。正常なリクエストがきた場合のみ、Contextの状態をStateから変化させます。あとは同様に状態によって実装を行っていく感じですね。前回の一つにまとめていたソースに比べてかなりコードが単純明快になったのがわかると思います。これ以降に状態が追加されてもクラスの追加とContextのrequestを追加するだけで済み、元のソースコードに大きな変更を加えずに、クラスを追加するだけで良いというプログラムを書く上でもっとも避けたい変更を最小限に済ませる、という目的が遂げられました!おわりにしばらくぶりのデザインパターンでしたが、Stateパターンが非常にシンプルで目的もわかりやすかったので書きやすい記事でした。後は残すところCompountパターンのみとなりましたが、このまま最後まで駆け抜けていければと思います!そして、次の資料を何にしようか検討中です。ジャーナルと戯れています。デザインパターン...2014-10-11【デザインパターン】コンパウンドパターン【事前学習編1】どうも、昨日見事にブログを書き忘れていました。2014-08-02【デザインパターン】コンポジットパターン普通に書くの忘れてました。React・Reduxの導入からサーバーサイドレンダリングによるUXの向上まで【書評】現場で役立つシステム設計の原則~変更を楽で安全にするオブジェクト指向の実践技法isucon9予選で赤い彗星になれず予選落ちしました月別アーカイブ参加グループ焼き肉ブログはてなブログをはじめよう!dorivenさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。