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