Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
OOP, Double Dispatch and Visitor Pattern
Search
Akihito Koriyama
May 24, 2024
Technology
3
190
OOP, Double Dispatch and Visitor Pattern
OOPのエッセンスとビジターパターンを使ったディスパッチのデザインパターン。弁護士ドットコム社で紹介。
Akihito Koriyama
May 24, 2024
Tweet
Share
More Decks by Akihito Koriyama
See All by Akihito Koriyama
BEAR.Sunday Framework Masterclass
koriym
0
42
Be Framework: 生命システムとしての存在理解
koriym
0
96
新世界の理解
koriym
0
200
AI Centric
koriym
0
490
app-state-diagram
koriym
0
130
BEAR.Sunday 2014-2024
koriym
0
86
イベント駆動コンテンツ (a.k.a Webアプリケーションの効率を再定義するBEAR.Sundayの分散キャッシングフレームワーク)
koriym
5
9.4k
Unconf: RWA読書会
koriym
0
660
REST 6+4の制約
koriym
2
3k
Other Decks in Technology
See All in Technology
Claude Codeが爆速進化してプラグイン追従がつらいので半自動化した話 ver.2
rfdnxbro
0
540
モブプログラミング再入門 ー 基本から見直す、AI時代のチーム開発の選択肢 ー / A Re-introduction of Mob Programming
takaking22
5
1.5k
Zeal of the Convert: Taming Shai-Hulud with AI
ramimac
0
110
Keycloak を使った SSO で CockroachDB にログインする / CockroachDB SSO with Keycloak
kota2and3kan
0
120
JAWS FESTA 2025でリリースしたほぼリアルタイム文字起こし/翻訳機能の構成について
naoki8408
1
550
非情報系研究者へ送る Transformer入門
rishiyama
11
7.5k
僕、S3 シンプルって名前だけど全然シンプルじゃありません よろしくお願いします
yama3133
1
220
社内レビューは機能しているのか
matsuba
0
130
マルチプレーンGPUネットワークを実現するシャッフルアーキテクチャの整理と考察
markunet
2
250
ランサムウエア対策してますか?やられた時の対策は本当にできてますか?AWSでのリスク分析と対応フローの泥臭いお話。
hootaki
0
140
Lambda Web AdapterでLambdaをWEBフレームワーク利用する
sahou909
0
130
AWSの資格って役に立つの?
tk3fftk
2
340
Featured
See All Featured
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
1
150
The Curious Case for Waylosing
cassininazir
0
270
Designing for humans not robots
tammielis
254
26k
RailsConf 2023
tenderlove
30
1.4k
The SEO identity crisis: Don't let AI make you average
varn
0
420
Introduction to Domain-Driven Design and Collaborative software design
baasie
1
640
Mobile First: as difficult as doing things right
swwweet
225
10k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
254
22k
The untapped power of vector embeddings
frankvandijk
2
1.6k
How GitHub (no longer) Works
holman
316
140k
The Invisible Side of Design
smashingmag
302
51k
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
2
550
Transcript
001 %PVCMF%JTQBUDIBOE 7JTJUPS1BUUFSO "LJIJUP,PSJZBNB
1BSU001ͱखଓܕ 001BOEQSPDFEVSBMUZQFT
-PHJD %BUB
࢛֯ܗͷ໘ੵΛٻΊΔ 'JOEJOHUIFBSFBPGBRVBESBOHMF
-PHJD %BUB < > BYC
-PHJD%BUBΛΔඞཁ͕͋Δ -PHJDOFFETUPLOPX%BUB
"SFB %BUB BYC QVCMJDB QVCMJDC
ΧϓηϧԽͰ͖ͯͳ͍ /PUFODBQTVMBUFE
-PHJD %BUB BYC HFU" JOU HFU# JOU
ΧϓηϧԽͰ͖ͯͳ͍ /PUFODBQTVMBUFE
w 8IZHFUUFSBOETFUUFSNFUIPETBSFFWJM w (FUUFS4FUUFSѱͩɻҎ্ɻ
ΦϒδΣΫτࢦ PCKFDUPSJFOUFE
4IBQF < > BYC
4IBQF < > BYC BSFB JOU
खଓ͖ܕ QSPDFEVSBMUZQF
$MJFOU %BUB BYC B C
5FMM
4IBQF < > BYC BSFB JOU
"TL
$MJFOU %BUB BYC B C
5FMM %POUBTL
5FMMࣗݾنత 5FMMJTTFMGEJTDJQMJOFE
ΧϓηϧԽ FODBQTVMBUJPO
ΦϒδΣΫτࢦ PCKFDUPSJFOUFE
"TL ϩδοΫ͕σʔλͷ֎ʹ͋Δ *O"TL UIFMPHJDJTPVUTJEFUIFEBUB
-PHJD %BUB BYC B C
σʔλߏ͕࿐ग़ %BUBTUSVDUVSFTFYQPTFE
ϧʔϧ͕ͳ͍ /PSVMFT
υϝΠϯ͕ࣝͳ͍ -BDLPGEPNBJOLOPXMFEHF
υϝΠϯශ݂ %%% %PNBJOBOBFNJB %%%
1BSUμϒϧσΟεύον %PVCMFEJTQBUDI
001Ͱ-PHJDͱ%BUBΛ
యܕత001ͰΦϒδΣΫτ͕ -PHJDΛϓϩύςΟʹอ࣋ *OUZQJDBM001 PCKFDUTIPME-PHJDBTBQSPQFSUZ
%BUB -PHJD BYC
7JTJUPSύλʔϯͰ -PHJD͕σʔλΛ๚ -PHJDWJTJUTEBUBPCKFDUJOUIF7JTJUPSQBUUFSO
7JTJUPS %BUB GVODUJPOBDDFQU 7JTJUPSW
σʔλ๚ऀΛར༻ %BUBVTFTWJTJUPST
7JTJUPS %BUB WWJTJU B C
๚ऀʹϩδοΫ͕͋Δ 7JTJUPSTIBWFMPHJD
7JTJUPS %BUB GVODUJPOWJTJU B C SFUVSOB C
7JTJUPSͰ -PHJD͕ϝιουͰ͞ΕΔ *OUIF7JTJUPSQBUUFSO -PHJDJTQBTTFECZNFUIPE
σʔλίϨΫλʔ ਤܗͷࢹ֮Խ όϦσʔγϣϯ %BUBDPMMFDUPST TIBQFWJTVBMJTBUJPO7BMJEBUJPO
ଟ༷ͳ-PHJDͷҰ࣌తͳ๚ %JWFSTF-PHJDUFNQPSBSZWJTJUT
" %BUB #
γϯάϧσΟεύον ࣮ߦͷܾఆ͕୯Ұ 4JOHMFEJTQBUDI TJOHMFEFDJTJPOUPFYFDVUF
" %BUB # BDDFQU WJTJU
μϒϧσΟεύον ࣮ߦͷܾఆ͕̎ճ %PVCMFEJTQBUDI 5XPFYFDVUJPOEFDJTJPOT
ଟॏσΟεύον ࣮ߦͷܾఆ͕ෳճ .VMUJQMFEJTQBUDI .VMUJQMFFYFDVUJPOEFDJTJPOT
QBSU%*ίϯύΠϥͷઃܭ %*DPNQJMFSEFTJHO
Πϯελϯεੜ JOTUBODFDSFBUJPO
%BUB wOFX*OTUBODF wDMBTT/BNF wBSHVNFOUT wBSHVNFOU wTFUUFS.FUIPET wTFUUFS.FUIPE wNFUIPE/BNF wBSHVNFOUT
wBSHVNFOU Dependency
ґଘʹґଘ͕͋Δ %FQFOEFODFVQPOEFQFOEFODF
%BUB wOFX*OTUBODF wDMBTT/BNF wBSHVNFOUT wBSHVNFOU wTFUUFS.FUIPET wTFUUFS.FUIPE wNFUIPE/BNF wBSHVNFOUT
wBSHVNFOU Dependency
7JTJUPSίϯύΠϥͷઃܭ 7JTJUPSDPNQJMFSEFTJHO
ड͚औͬͨΦϒδΣΫτར༻Λ܁Γฦ͢ 3FQFBUSFDFJWFEPCKFDUVTF
w WJTJU%FQFEFODZ w WJTJU/FX*OTOUBDF w WJTJU"SHVNFOUT w WJTJU"SHVNFOU w
WJTJU4FUUFS.FUIPET w WJTJU4FUUFS.FUIPE %BUB w OFX*OTUBODF wDMBTT/BNF wBSHVNFOUT wBSHVNFOU wTFUUFS.FUIPET wTFUUFS.FUIPE wNFUIPE/BNF wBSHVNFOUT wBSHVNFOU Visitor Dependency
4FUUFS.FUIPETͷ߹ 'PS4FUUFS.FUIPET
%BUB SetterMethods public function accept(VisitorInterface $visitor) { $visitor->visitSetterMethods($this->setterMethods); }
w Visitor public function visitSetterMethods( array $setterMethods ) { foreach
($setterMethods as $setterMethod) { $setterMethod->accept($this); } }
7JTJUPSड͚औͬͨΦϒδΣΫτΛ ʑͱεΫϦϓτʹ 5IF7JTJUPSTFOETUIFSFDFJWFEPCKFDUUPUIFTDSJQUDPEF
ෳࡶͳߏͷBDDFQUͱWJTJUΛ܁Γฦ͠ ݁ہ࠷ॳͷίʔϧ͕࠷ऴ݁ՌΛड͚औΔ 3FQFBUFEBDDFQUBOEWJTJUPGDPNQMFYTUSVDUVSFT &WFOUVBMMZUIF fi STUDBMMSFDFJWFTUIF fi OBMSFTVMU
w WJTJU%FQFEFODZ w %BUB w Visitor Dependency
ͦΕͧΕͷϝιου ہॴతͳࣝͱλεΫ͔͠ཁٻ͞Εͳ͍ 0OMZMPDBMLOPXMFEHFBOEUBTLTBSFSFRVJSFE
ෳࡶͳґଘߏΛίϯύΠϥΒͳ͍ $PNQJMFSTBSFVOBXBSFPGDPNQMFYEFQFOEFODZTUSVDUVSFT
ࠓԿΛ͢Δ͔ͱɺ࣍ʹԿΛݺͿ͔ ଞʹؔ৺͕ͳ͍ 8IBUUPEPOPXBOEXIBUUPDBMMOFYU /PUJOUFSFTUFEJOBOZUIJOHFMTF
શମΛΔίϯμΫλʔ͍ͳ͍ /PDPOEVDUPSLOPXTUIFXIPMFTUSVDUVSF
ΦʔέετϨʔγϣϯͰͳ͘ɺίϨΦάϥϑΟʔ $IPSFPHSBQIZ OPUPSDIFTUSBUJPO
σʔλͱϩδοΫΛ͠ɺΦϒδΣΫ τߏͷৄࡉΛΒͣʹ৽͍͠ϩδοΫ Λద༻Ͱ͖ΔσβΠϯύλʔϯ %FTJHOQBUUFSOTUIBUTFQBSBUFEBUBGSPNMPHJDBOE BMMPXOFXMPHJDUPCFBQQMJFEXJUIPVULOPXJOHUIF EFUBJMTPGUIFPCKFDUTUSVDUVSF