覚えて帰ろうjavaデザインパターン

37
Copyright © BizReach, Inc. All Right Reserved. 1 覚覚覚覚覚覚 Java 覚覚覚覚覚覚覚覚 2017 年 01 年 20 年 年年年年年年年年年 年年年年年年年年年年年年年年 年年 年年

Upload: dcubeio

Post on 13-Apr-2017

441 views

Category:

Engineering


1 download

TRANSCRIPT

Page 1: 覚えて帰ろうJavaデザインパターン

Copyright © BizReach, Inc. All Right Reserved. 1

覚えて帰ろうJava デザインパターン

2017 年 01 月 20 日

株式会社ビズリーチプロダクトマーケティング本部

廣田 和也

Page 2: 覚えて帰ろうJavaデザインパターン

Copyright © BizReach, Inc. All Right Reserved. 2

自己紹介

名前 廣田 和也

所属 株式会社ビズリーチ

仕事 ビズリーチサービスの   企業側サイトのグロースハック

java 5 年くらい

Page 3: 覚えて帰ろうJavaデザインパターン

Copyright © BizReach, Inc. All Right Reserved. 3

自己紹介

会員制転職サイト ビズリーチ

Page 4: 覚えて帰ろうJavaデザインパターン

Copyright © BizReach, Inc. All Right Reserved. 4

アジェンダ

デザインパターンとは

Template Method パターン

Strategy パターン

Page 5: 覚えて帰ろうJavaデザインパターン

Copyright © BizReach, Inc. All Right Reserved. 5

デザインパターンとは

Page 6: 覚えて帰ろうJavaデザインパターン

Copyright © BizReach, Inc. All Right Reserved. 6

デザインパターンとは

ソフトウェア開発におけるデザインパターンとは過去のソフトウェア設計者が発見し編み出した設計ノウハウを蓄積し、名前をつけ、再利用しやすいように特定の規約に従ってカタログ化したものである。

引用元: wikipedia   デザインパターン ( ソフトウェア )

Page 7: 覚えて帰ろうJavaデザインパターン

Copyright © BizReach, Inc. All Right Reserved. 7

要するに過去の賢人の苦悩の末編み出された

GOOD な設計パターン集です!

Page 8: 覚えて帰ろうJavaデザインパターン

Copyright © BizReach, Inc. All Right Reserved. 8

GoF (Gang of Four) のデザインパターン

GoF とはエーリヒ・ガンマ、リチャード・ヘルム

ラルフ・ジョンソン、ジョン・ブリシディースの4 人のことで、書籍『オブジェクト指向における再利用のためのデザインパターン』においてデザインパターンという用語を初めてソフトウェア開発に導入し、同時に書籍の中で 23 種類のパターンを取り上げた。

デザインパターンとは

Page 9: 覚えて帰ろうJavaデザインパターン

Copyright © BizReach, Inc. All Right Reserved. 9

Java だと

GoF のデザインパターンを Javaで解説した『 Java 言語で学ぶデザインパターン入門』結城 浩著が有名

デザインパターンとは

Page 10: 覚えて帰ろうJavaデザインパターン

Copyright © BizReach, Inc. All Right Reserved. 10

GoF のデザインパターン  23 種

Abstract FactoryBuilderFactory MethodPrototypeSingletonAdapterBridgeCompositeDecoratorFacadeFlyweightProxy

デザインパターンとは

Chain of ResponsibilityCommandInterpreterIteratorMediatorMementoObserverStateStrategyTemplate MethodVisitor

Page 11: 覚えて帰ろうJavaデザインパターン

Copyright © BizReach, Inc. All Right Reserved. 11

今日は業務で地味に使うデザインパターンを2つ紹介します

デザインパターンとは

Page 12: 覚えて帰ろうJavaデザインパターン

Copyright © BizReach, Inc. All Right Reserved. 12

GoF のデザインパターン  23 種

Abstract FactoryBuilderFactory MethodPrototypeSingletonAdapterBridgeCompositeDecoratorFacadeFlyweightProxy

デザインパターンとは

Chain of ResponsibilityCommandInterpreterIteratorMediatorMementoObserverStateStrategyTemplate MethodVisitor

Page 13: 覚えて帰ろうJavaデザインパターン

Copyright © BizReach, Inc. All Right Reserved. 13

GoF のデザインパターン  23 種

Abstract FactoryBuilderFactory MethodPrototypeSingletonAdapterBridgeCompositeDecoratorFacadeFlyweightProxy

デザインパターンとは

Chain of ResponsibilityCommandInterpreterIteratorMediatorMementoObserverStateStrategyTemplate MethodVisitor

Page 14: 覚えて帰ろうJavaデザインパターン

Copyright © BizReach, Inc. All Right Reserved. 14

少ない労力で良い設計ができる• 車輪の再発明はしない

メンバーに少ない単語で正確に設計を伝えられる• パターン名を伝えるだけで、その構造と振る舞いを瞬時に共有できる

覚えてうれしいこと

デザインパターンとは

Page 15: 覚えて帰ろうJavaデザインパターン

Copyright © BizReach, Inc. All Right Reserved. 15

Template Method パターン

Page 16: 覚えて帰ろうJavaデザインパターン

Copyright © BizReach, Inc. All Right Reserved. 16

Template Method パターン

突然ですが・・・テンプレートって知ってますか?

Page 17: 覚えて帰ろうJavaデザインパターン

Copyright © BizReach, Inc. All Right Reserved. 17

Template Method パターン

コレです。 ↓↓↓↓

Page 18: 覚えて帰ろうJavaデザインパターン

Copyright © BizReach, Inc. All Right Reserved. 18

Template Method パターン

ある処理のおおまかなアルゴリズムをあらかじめ決めて、

そのアルゴリズムの具体的な設計をサブクラスに任せることで

ある。

Template Method パターンとは

Page 19: 覚えて帰ろうJavaデザインパターン

Copyright © BizReach, Inc. All Right Reserved. 19

Template Method パターン

要するにこんなイメージ

Page 20: 覚えて帰ろうJavaデザインパターン

Copyright © BizReach, Inc. All Right Reserved. 20

Template Method パターン

要するにこんなイメージ

太郎くん

うまい棒

Page 21: 覚えて帰ろうJavaデザインパターン

Copyright © BizReach, Inc. All Right Reserved. 21

Template Method パターン

要するにこんなイメージ

花子さん

漫画

Page 22: 覚えて帰ろうJavaデザインパターン

Copyright © BizReach, Inc. All Right Reserved. 22

Template Method パターン

要するにこんなイメージ

花子さん

漫画

これだと「変数の中身が変わっただけじゃん」と思うかもしれないが

実際の Template Method では空欄にアルゴリズムが入る

Page 23: 覚えて帰ろうJavaデザインパターン

Copyright © BizReach, Inc. All Right Reserved. 23

Template Method パターン

スーパークラスで処理の枠組みを定め、サブクラスでその具体的内容を実装する。

どんな設計?

Page 24: 覚えて帰ろうJavaデザインパターン

Copyright © BizReach, Inc. All Right Reserved. 24

Template Method パターン

サンプル - 動物との遭遇

フロー動物:現れる 人:動物においでおいでをする動物:おいでおいでにリアクションする 人:動物に餌をあげる動物:餌にリアクションする

動物は以下の種類にて切り替えが可能である →猫、犬、豚

Page 25: 覚えて帰ろうJavaデザインパターン

Copyright © BizReach, Inc. All Right Reserved. 25

Template Method パターン

sample program

動物との遭遇クラス図

登場人物・ AbstractClass(抽象クラス ) →AbstractAnimalEncounter・ ConcreteClass(具象クラス ) →DogEncounter,PigEncounter,CatEncountercommunicateAnimal

encounter encounter encounter

Page 26: 覚えて帰ろうJavaデザインパターン

Copyright © BizReach, Inc. All Right Reserved. 26

sample code...

Template Method パターン

Page 27: 覚えて帰ろうJavaデザインパターン

Copyright © BizReach, Inc. All Right Reserved. 27

Template Method パターン

流れが同一で詳細が異なる処理をまとめられる

呼び出し元でサブクラスを意識しなくてすむ

うれしいこと

Page 28: 覚えて帰ろうJavaデザインパターン

Copyright © BizReach, Inc. All Right Reserved. 28

Strategy パターン2

Page 29: 覚えて帰ろうJavaデザインパターン

Copyright © BizReach, Inc. All Right Reserved. 29

Strategy パターン

戦略( Strategy)=プログラミングにおける「アルゴリズム」

Strategy パターンでは、そのアルゴリズムを実装した部分がごっ

そり交換できるようになっている

29

どんなパターン?

Page 30: 覚えて帰ろうJavaデザインパターン

Copyright © BizReach, Inc. All Right Reserved. 30

Strategy パターン

30

要するにマリオカートにおけるマリオとクッパです

操作は同じでも戦略は異なる

Page 31: 覚えて帰ろうJavaデザインパターン

Copyright © BizReach, Inc. All Right Reserved. 31

Strategy パターン

31

例えばこんな感じ・・

◆コンピューターと対戦する将棋ゲームで対戦相手のレベルによって異なる打ち方(戦略)をさせる

◆ EC などの購入にて支払い方法によって購入処理のなかの課金処理(アルゴリズム)だけを切り替える

Page 32: 覚えて帰ろうJavaデザインパターン

Copyright © BizReach, Inc. All Right Reserved. 32

Template Method パターン

サンプル - 動物とのふれあい

フロー動物:現れる 人:動物においでおいでをする動物:おいでおいでにリアクションする 人:動物に餌をあげる動物:餌にリアクションする

人のふれあい方法は以下の種類にて切り替えが可能である →積極的、消極的

Page 33: 覚えて帰ろうJavaデザインパターン

Copyright © BizReach, Inc. All Right Reserved. 33

sample program

猫とのふれあい戦略クラス図

Strategy パターン

登場人物・ StrategyInterface(戦略の役 ) →SkinshipStrategy・ ConcreteStrategy(具体的戦略 ) →StrokeStrategy,FeedStrategy, SlapStrategy・ Context(文脈 ) →ApproachCatLogic

Page 34: 覚えて帰ろうJavaデザインパターン

Copyright © BizReach, Inc. All Right Reserved. 34

sample code...

Strategy パターン

Page 35: 覚えて帰ろうJavaデザインパターン

Copyright © BizReach, Inc. All Right Reserved. 35

戦略毎にクラスが別になるのでメンテナンスしやすい• 戦略の切り替えが容易• メソッドにとけこんだ形のアルゴリズムより、柔軟で修正しやすい

戦略の追加の際に呼び出しメソッドの修正が不要

アルゴリズムを動的に切り替える際に有用• 実行環境での切り替え(ローカル、検証、本番)等

うれしいこと

Strategy パターン

Page 36: 覚えて帰ろうJavaデザインパターン

Copyright © BizReach, Inc. All Right Reserved. 36

質疑応答

Page 37: 覚えて帰ろうJavaデザインパターン

Copyright © BizReach, Inc. All Right Reserved.