java-ja 第1回 チキチキ『( ゜ェ゜)・;’.、ゴフッ』 - visitor
DESCRIPTION
java-ja 第1回 チキチキ『( ゜ェ゜)・;’.、ゴフッ』 - VisitorTRANSCRIPT
![Page 1: java-ja 第1回 チキチキ『( ゜ェ゜)・;’.、ゴフッ』 - Visitor](https://reader030.vdocuments.mx/reader030/viewer/2022020122/549a366cb47959564d8b5959/html5/thumbnails/1.jpg)
ヽ(*゚д゚)ノ<Visitor パターン
12011/04/25
第1回 チキチキ『( ゜ェ゜)・;'.、ゴフッ』2011年4月26日火曜日
![Page 2: java-ja 第1回 チキチキ『( ゜ェ゜)・;’.、ゴフッ』 - Visitor](https://reader030.vdocuments.mx/reader030/viewer/2022020122/549a366cb47959564d8b5959/html5/thumbnails/2.jpg)
ID:yuroyoroゆろよろ
2
お前、誰よ?
2011年4月26日火曜日
![Page 3: java-ja 第1回 チキチキ『( ゜ェ゜)・;’.、ゴフッ』 - Visitor](https://reader030.vdocuments.mx/reader030/viewer/2022020122/549a366cb47959564d8b5959/html5/thumbnails/3.jpg)
Visitorパターンって
3
2011年4月26日火曜日
![Page 4: java-ja 第1回 チキチキ『( ゜ェ゜)・;’.、ゴフッ』 - Visitor](https://reader030.vdocuments.mx/reader030/viewer/2022020122/549a366cb47959564d8b5959/html5/thumbnails/4.jpg)
Listやツリーなど
構造の中を巡回し
要素の型に応じて
適切な処理を
行うためのパターン
4
2011年4月26日火曜日
![Page 5: java-ja 第1回 チキチキ『( ゜ェ゜)・;’.、ゴフッ』 - Visitor](https://reader030.vdocuments.mx/reader030/viewer/2022020122/549a366cb47959564d8b5959/html5/thumbnails/5.jpg)
訪問者
5
2011年4月26日火曜日
![Page 6: java-ja 第1回 チキチキ『( ゜ェ゜)・;’.、ゴフッ』 - Visitor](https://reader030.vdocuments.mx/reader030/viewer/2022020122/549a366cb47959564d8b5959/html5/thumbnails/6.jpg)
来訪者?
6
2011年4月26日火曜日
![Page 7: java-ja 第1回 チキチキ『( ゜ェ゜)・;’.、ゴフッ』 - Visitor](https://reader030.vdocuments.mx/reader030/viewer/2022020122/549a366cb47959564d8b5959/html5/thumbnails/7.jpg)
登場人物
Visitor : 構造を廻る処理を表す
Acceptor : 個々の要素
7
2011年4月26日火曜日
![Page 8: java-ja 第1回 チキチキ『( ゜ェ゜)・;’.、ゴフッ』 - Visitor](https://reader030.vdocuments.mx/reader030/viewer/2022020122/549a366cb47959564d8b5959/html5/thumbnails/8.jpg)
Visitor
interface vistor {
void visitFoo(Foo foo);
void visitBar(Bar foo);
}
※Acceporの具象クラス毎に
VisitXXXを用意するのがポイント
8
Acceptor毎の処理
2011年4月26日火曜日
![Page 9: java-ja 第1回 チキチキ『( ゜ェ゜)・;’.、ゴフッ』 - Visitor](https://reader030.vdocuments.mx/reader030/viewer/2022020122/549a366cb47959564d8b5959/html5/thumbnails/9.jpg)
Acceptor
interface Acceptor {
void accept(Visitor visitor);
}
class Foo implements Acceptor{
public void accept(Visitor visitor){
visitor.visitFoo(this);
}
} 9
自分の型に応じたvisitXXXを呼び出す
2011年4月26日火曜日
![Page 10: java-ja 第1回 チキチキ『( ゜ェ゜)・;’.、ゴフッ』 - Visitor](https://reader030.vdocuments.mx/reader030/viewer/2022020122/549a366cb47959564d8b5959/html5/thumbnails/10.jpg)
10
<interface>Acceptor
<interface>Visitor
<class>Foo
<class>SomeVisitor
<class>Bar
2011年4月26日火曜日
![Page 11: java-ja 第1回 チキチキ『( ゜ェ゜)・;’.、ゴフッ』 - Visitor](https://reader030.vdocuments.mx/reader030/viewer/2022020122/549a366cb47959564d8b5959/html5/thumbnails/11.jpg)
10
<interface>Acceptor
<interface>Visitor
<class>Foo
<class>SomeVisitor
<class>Bar
accept(this)
2011年4月26日火曜日
![Page 12: java-ja 第1回 チキチキ『( ゜ェ゜)・;’.、ゴフッ』 - Visitor](https://reader030.vdocuments.mx/reader030/viewer/2022020122/549a366cb47959564d8b5959/html5/thumbnails/12.jpg)
10
<interface>Acceptor
<interface>Visitor
<class>Foo
<class>SomeVisitor
<class>Bar
visitFoo(this)
2011年4月26日火曜日
![Page 13: java-ja 第1回 チキチキ『( ゜ェ゜)・;’.、ゴフッ』 - Visitor](https://reader030.vdocuments.mx/reader030/viewer/2022020122/549a366cb47959564d8b5959/html5/thumbnails/13.jpg)
10
<interface>Acceptor
<interface>Visitor
<class>Foo
<class>SomeVisitor
<class>Bar
accept(this)
2011年4月26日火曜日
![Page 14: java-ja 第1回 チキチキ『( ゜ェ゜)・;’.、ゴフッ』 - Visitor](https://reader030.vdocuments.mx/reader030/viewer/2022020122/549a366cb47959564d8b5959/html5/thumbnails/14.jpg)
10
<interface>Acceptor
<interface>Visitor
<class>Foo
<class>SomeVisitor
<class>Bar
visitBar(this)
2011年4月26日火曜日
![Page 15: java-ja 第1回 チキチキ『( ゜ェ゜)・;’.、ゴフッ』 - Visitor](https://reader030.vdocuments.mx/reader030/viewer/2022020122/549a366cb47959564d8b5959/html5/thumbnails/15.jpg)
10
<interface>Acceptor
<interface>Visitor
<class>Foo
<class>SomeVisitor
<class>Bar
2011年4月26日火曜日
![Page 16: java-ja 第1回 チキチキ『( ゜ェ゜)・;’.、ゴフッ』 - Visitor](https://reader030.vdocuments.mx/reader030/viewer/2022020122/549a366cb47959564d8b5959/html5/thumbnails/16.jpg)
面倒ですね?
何がうれしい?
11
2011年4月26日火曜日
![Page 17: java-ja 第1回 チキチキ『( ゜ェ゜)・;’.、ゴフッ』 - Visitor](https://reader030.vdocuments.mx/reader030/viewer/2022020122/549a366cb47959564d8b5959/html5/thumbnails/17.jpg)
たいていの場合、
再帰で書ける
12
2011年4月26日火曜日
![Page 18: java-ja 第1回 チキチキ『( ゜ェ゜)・;’.、ゴフッ』 - Visitor](https://reader030.vdocuments.mx/reader030/viewer/2022020122/549a366cb47959564d8b5959/html5/thumbnails/18.jpg)
再帰の問題点
void recurcive(Acceptor ac){
if( ac instanceof Foo) { ... }
else if { ac instanceof Bar {...}
}
13
2011年4月26日火曜日
![Page 19: java-ja 第1回 チキチキ『( ゜ェ゜)・;’.、ゴフッ』 - Visitor](https://reader030.vdocuments.mx/reader030/viewer/2022020122/549a366cb47959564d8b5959/html5/thumbnails/19.jpg)
instanceofって……。
Acceptorの種類が増えたら
if-else追加とか……。
14
2011年4月26日火曜日
![Page 20: java-ja 第1回 チキチキ『( ゜ェ゜)・;’.、ゴフッ』 - Visitor](https://reader030.vdocuments.mx/reader030/viewer/2022020122/549a366cb47959564d8b5959/html5/thumbnails/20.jpg)
Visitorパターンだと
visitXXXを追加しないと
コンパイルエラー
15
2011年4月26日火曜日
![Page 21: java-ja 第1回 チキチキ『( ゜ェ゜)・;’.、ゴフッ』 - Visitor](https://reader030.vdocuments.mx/reader030/viewer/2022020122/549a366cb47959564d8b5959/html5/thumbnails/21.jpg)
Visitorとは
↓void recurcive(Acceptor ac){
if( ac instanceof Foo) { ... }
else if { ac instanceof Bar {...}
}
↓を抽象化したもの
16
2011年4月26日火曜日
![Page 22: java-ja 第1回 チキチキ『( ゜ェ゜)・;’.、ゴフッ』 - Visitor](https://reader030.vdocuments.mx/reader030/viewer/2022020122/549a366cb47959564d8b5959/html5/thumbnails/22.jpg)
•Acceptorが増えても既存のAcceptorには影響がない
•Vistorは型安全なswitch文を表している
•visitXXXというメソッドは、switch文のcase節に相当する
17
2011年4月26日火曜日
![Page 23: java-ja 第1回 チキチキ『( ゜ェ゜)・;’.、ゴフッ』 - Visitor](https://reader030.vdocuments.mx/reader030/viewer/2022020122/549a366cb47959564d8b5959/html5/thumbnails/23.jpg)
•構造の変化の影響範囲をコンパイラがチェックしてくれる
•処理の実装漏れがなくなる
•テスト範囲が明確になる
18
2011年4月26日火曜日
![Page 24: java-ja 第1回 チキチキ『( ゜ェ゜)・;’.、ゴフッ』 - Visitor](https://reader030.vdocuments.mx/reader030/viewer/2022020122/549a366cb47959564d8b5959/html5/thumbnails/24.jpg)
こんど秀和システムさんから
Scalaの本出ます
19
2011年4月26日火曜日
![Page 25: java-ja 第1回 チキチキ『( ゜ェ゜)・;’.、ゴフッ』 - Visitor](https://reader030.vdocuments.mx/reader030/viewer/2022020122/549a366cb47959564d8b5959/html5/thumbnails/25.jpg)
ScalaでのVisitorパターンや
ジェネリックスを利用した
デザパタなど
書いてます!
20
2011年4月26日火曜日