KICK THE DP

KICK THE CAN CREWでデザインパターンを攻略するブログ

Ch.23 KICK THE INTERPRETER

【目標】

Interpreterパターンを使って、"SWING TOGETHER マイナス W"を求めてみよう

【クラス図】

f:id:mikeera2:20160928215259p:plain

【実装】

<IExpressionインターフェース:AbstractExpression>

f:id:mikeera2:20160928221525p:plain

≪WordExpressionクラス:TerminalExpression≫

f:id:mikeera2:20160928222228p:plain

f:id:mikeera2:20160928222156p:plain

≪MinusExpressionクラス:TerminalExpression≫

f:id:mikeera2:20160928222519p:plain

≪Parserクラス:Context≫

f:id:mikeera2:20160928223150p:plain

f:id:mikeera2:20160928223234p:plain

[Mainクラス:Client]

f:id:mikeera2:20160928223337p:plain

【出力結果】

f:id:mikeera2:20160928223428p:plain

【メモ】

・この企画のクライマックスにふさわしい地味さ加減がすばらしい

・NonterminalExpression?何それ。

XMLのパーサーとかにも使えるかなぁ

Ch.22 KICK THE COMMAND

【目標】

COMMANDパターンを使って、KICK THE CAN CREWのベストアルバムをタイトル順にソートしたあと、履歴をたどって元に戻そう

【クラス図】

f:id:mikeera2:20160928173125p:plain

【シーケンス図】

f:id:mikeera2:20160928173138p:plain

【実装】

<ICommandインターフェース:Command>

f:id:mikeera2:20160928174430p:plain

≪Swapクラス:ConcreteCommand≫

f:id:mikeera2:20160928174834p:plain

≪MacroSwapクラス:ConcreteCommand≫

f:id:mikeera2:20160928180809p:plain

f:id:mikeera2:20160928180821p:plain

≪Albumクラス:Receiver≫

f:id:mikeera2:20160928182445p:plain

f:id:mikeera2:20160928182449p:plain

[Mainクラス:Client, Invoker]

f:id:mikeera2:20160928182938p:plain

f:id:mikeera2:20160928182945p:plain

【出力結果】

f:id:mikeera2:20160928183118p:plain

f:id:mikeera2:20160928183125p:plain

【メモ】

・これソースだけで理解するの難しそう

・Albumクラス(実体)→Swapクラス(命令を表すクラス)→Albumクラス(実体)というふうに処理が流れているところがポイント

・履歴を保存する以外にも用途があるらしいけど、よくわからん。似たような操作をクラスとしてまとめる感じ?

Ch.21 KICK THE PROXY

【目標】

Proxyパターンを使って、ギャラの安い仕事は神輿ロッカーズJr.に任せよう

【クラス図】

f:id:mikeera2:20160928163125p:plain

【実装】

<AbstractMikoshiRockers抽象クラス:Subject>

f:id:mikeera2:20160928164131p:plain

≪MikoshiRockersクラス:RealSubject≫

f:id:mikeera2:20160928163859p:plain

≪MikoshiRockersJrクラス:Proxy≫

f:id:mikeera2:20160928164834p:plain

[Mainクラス:Client]

f:id:mikeera2:20160928165100p:plain

【出力結果】

f:id:mikeera2:20160928165202p:plain

【メモ】

・本来はギャラの高い仕事ではなく、処理の重い仕事とかをRealSubjectに回す

・神輿ロッカーズJr.が何者なのか私はよく知らない

Ch.20 KICK THE FLYWEIGHT

【目標】

FLYWEIGHTパターンを使って、アンバランスを ≠″ ャ  」レ 文字 イヒ  ι ちゃ ぇ ☆

【 勹  ラ  ス 図】

f:id:mikeera2:20160927215316p:plain

【 ι″っξ ぅ 】

≪GalCharacter 勹  ラ  ス :Flyweight

f:id:mikeera2:20160927221600p:plain

f:id:mikeera2:20160927221610p:plain

≪GalCharacterConverter勹  ラ  ス :FlyweightFactory≫

f:id:mikeera2:20160927222249p:plain

f:id:mikeera2:20160927222256p:plain

[Main勹  ラ  ス :Client]

f:id:mikeera2:20160927222449p:plain

【 ι ゅ ⊃  丶) ょ <  レナ っ カゝ 】

f:id:mikeera2:20160927222700p:plain

【 乂  モ 】

・重複を 于 ェッ 勹  ι τ、同 ι″ ィ  ・/  ス  勺  ・/  ス を イ乍 成 ι  ナょ  レヽ  ょ  ぅ  レニ  ι τ レヽ  ゑ  ー⊂  ⊇  з  カゞ  朮° ィ  ・/  ├

・ ≠″ ャ  」レ  レよ  木黄 文字 レニ 弱 レヽ 

Ch.19 KICK THE STATE

【目標】

Stateパターンを使って、イッサイガッサイの1週間をやってみよう

【クラス図】

f:id:mikeera2:20160927182447p:plain

【実装】

<DayOfWeek抽象クラス:State>

f:id:mikeera2:20160927182839p:plain

≪Sundayクラス:ConcreteState≫

f:id:mikeera2:20160927183327p:plain

≪Mondayクラス:ConcreteState≫

~略~

≪Tuesdayクラス:ConcreteState≫

~略~

≪Wednesdayクラス:ConcreteState≫

~略~

≪Thursdayクラス:ConcreteState≫

~略~

≪Fridayクラス:ConcreteState≫

~略~

≪Issaigassaiクラス:Context≫

f:id:mikeera2:20160927183816p:plain

f:id:mikeera2:20160927183820p:plain

[Mainクラス]

f:id:mikeera2:20160927183939p:plain

【出力結果】

f:id:mikeera2:20160927184052p:plain

【メモ】

・そろそろワンパターン

・列挙型を使いたくなるところをクラスにまとめているのがポイント

・もうちょっとConcreteStateがいろんなメソッドを持たないとメリットがわからない

・「状態」がメソッドを行うというのに多少違和感がある

Ch.18 KICK THE MEMENTO

【目標】

Mementoパターンを使って、マルシェスロット的なことをやってみよう

【クラス図】

f:id:mikeera2:20160927170513p:plain

【実装】

≪MarcheMemoryクラス:Memento≫

f:id:mikeera2:20160927172600p:plain

≪MarcheSlotクラス:Originator≫

f:id:mikeera2:20160927174843p:plain

f:id:mikeera2:20160927174849p:plain

f:id:mikeera2:20160927174856p:plain

[Mainクラス:Caretaker]

f:id:mikeera2:20160927175118p:plain

【出力結果】

f:id:mikeera2:20160927175440p:plain

f:id:mikeera2:20160927175447p:plain

【メモ】

・KICK関係ねぇし

・本来はGUIの操作内容を保存しとくためとかに使用するらしい