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
オブジェクト指向のこころ: 第22章 / DESIGN PATTERNS EXPLAINED:...
Search
hideki kinjyo
PRO
February 03, 2022
Programming
0
180
オブジェクト指向のこころ: 第22章 / DESIGN PATTERNS EXPLAINED: chapter-22
会社で「オブジェクト指向のこころ」の読書会をやっています
hideki kinjyo
PRO
February 03, 2022
Tweet
Share
More Decks by hideki kinjyo
See All by hideki kinjyo
Composerが「依存解決」のためにどんな工夫をしているか #phpcon
o0h
PRO
1
430
Composerの依存解決 #phpstudy
o0h
PRO
0
120
「影響が少ない」を自分の目でみてみる
o0h
PRO
3
1.7k
PHPによる"非"構造化プログラミング入門 -本当に熱いスパゲティコードを求めて- #phperkaigi
o0h
PRO
0
1.6k
もう少しテストを書きたいんじゃ〜 #phpstudy
o0h
PRO
22
5.2k
『テスト書いた方が開発が早いじゃん』を解き明かす #phpcon_nagoya
o0h
PRO
9
3.9k
色んなオートローダーを覗き見る #phpcon_okinawa
o0h
PRO
5
700
ヒューマンエラーの本を読んだ ~報告会~
o0h
PRO
3
360
みんなでワイワイ「テスト駆動開発」の話をやる会 #techramen24conf
o0h
PRO
4
700
Other Decks in Programming
See All in Programming
意外と簡単!?フロントエンドでパスキー認証を実現する WebAuthn
teamlab
PRO
2
760
Ruby Parser progress report 2025
yui_knk
1
450
Oracle Database Technology Night 92 Database Connection control FAN-AC
oracle4engineer
PRO
1
450
テストコードはもう書かない:JetBrains AI Assistantに委ねる非同期処理のテスト自動設計・生成
makun
0
320
AWS発のAIエディタKiroを使ってみた
iriikeita
1
190
AIコーディングAgentとの向き合い方
eycjur
0
270
為你自己學 Python - 冷知識篇
eddie
1
350
ファインディ株式会社におけるMCP活用とサービス開発
starfish719
0
1.7k
「待たせ上手」なスケルトンスクリーン、 そのUXの裏側
teamlab
PRO
0
530
デザイナーが Androidエンジニアに 挑戦してみた
874wokiite
0
490
Tool Catalog Agent for Bedrock AgentCore Gateway
licux
6
2.5k
GitHubとGitLabとAWS CodePipelineでCI/CDを組み比べてみた
satoshi256kbyte
4
240
Featured
See All Featured
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
15
1.7k
It's Worth the Effort
3n
187
28k
Documentation Writing (for coders)
carmenintech
74
5k
Fireside Chat
paigeccino
39
3.6k
Facilitating Awesome Meetings
lara
55
6.5k
For a Future-Friendly Web
brad_frost
180
9.9k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
285
13k
Docker and Python
trallard
46
3.6k
Build your cross-platform service in a week with App Engine
jlugia
231
18k
How GitHub (no longer) Works
holman
315
140k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
31
2.2k
Transcript
ୈ22ষ Object Poolύλʔϯ ՝ਤॻ: ΦϒδΣΫτࢦͷ͜͜Ζ: σβΠϯύλʔϯͱͱʹֶͿ
ᴷେ·͔ʹݴ͑ɺΦϒδΣΫτϓʔϧύλʔϯɺ͏ͷΛ ܾ·͚ͬͨͩɺݴ͍͑ΕϓʔϧΛɺ࡞Δํ๏Ͱ͢ɻ GoݴޠʹΑΔฒߦॲཧ P59-60
ͳΜͰͦΜͳࣄ͍ͨ͠ͷʁ • ΦϒδΣΫτͷੜίετ͕ߴ͘ɺ͋Μ·Γੜͨ͘͠Ͷʙͱ͍͏͕࣌͋ Δ(࡞Γஔ͖ˍ͍·Θ͍ͨ͠) • ͜ΕSingletonͱࣅͨಈػͰ͢Ͷ • ੜ͞ΕΔʹ্ݶΛઃ͚͍ͨͳʙͱ͍͏͕࣌͋Δ(ϦιʔεཧΛγϏΞ) • (ʮੜ࣌ʹϝϞϦΛXXX
KB֬อ͢ΔΑʯͬͯΦϒδΣΫτ͕ແݶʹ࡞ ΒΕͨΒࠔΔΜ͡Όɺͱ͔Ͱ) • ৽͘͠࡞Βͳ͍Ͱɺۭ͖͕ग़Δ·Ͱͬͯཉ͍͠ʂ • ओʹඇಉظॲཧΛѻ͏έʔεʹͯ༗༻
Ͳ͏Δͷʁ • PoolΫϥε(Manager)Λͭ͘Δ • Pool • ͑ΔΦϒδΣΫτ(Ϧιʔε)Λɺۭ͖ঢ়ଶ͕Θ͔Δঢ়ଶ ͰஷΊΔ • ཁٻ͞ΕͨΒۭ͍͍ͯΔΦϒδΣΫτΛฦ͢
• ͍ऴΘͬͨΒΦϒδΣΫτΛฦͯ͠Β͏ • ར༻ऀɺΦϒδΣΫτͷऔಘΛPoolܦ༝Ͱߦ͏Α͏ʹ͢Δ
Ϧιʔεͩ͘ ͍͞ʂ ͍͋Αʂ ͭऔΓग़͢ Α Ͳ͏ͧʙ ͍ऴΘͬ ͨΑʂ ͍͋Αʂ ฦ͖ͬͯͨ
Α
Ϧιʔεͩ͘ ͍͞ʂ ͳ͍ͷͩ Θʂʂ ͭऔΓग़͢ Α Ͳ͏ͧʙ ͬͯͶʂ ͬͯͶʂ ͬͯͶʂ
ͬͯͶʂ ͬͯͶʂ ͬͯͶʂ ,*5"ʂʂ ͬͯͶʂ ͍ऴΘͬ ͨΑʂ
Pool͕ͳ͍ͱͲ͏ͳΔͷʁ • ར༻ऀͷ͚ͩʮੜʯͷॲཧ͕Δʂ • ੜ1ͭ1ͭʹύϫʔ͕ཁΔ • ͦͷ͚ͩࣗଓઌͷϦιʔεΛফඅ͢Δ • ͍͡ΘΔͳ؍: ʮϦιʔεͷফඅঢ়گʯΛࢹͯ͠ɺΓ
ͳ͔ͬͨΒͲ͏͜͏͢ΔʙΛ͢ΕPool͠ͳ͍͍ͯ͘ʁ • ੜʹ͏ύϫʔมΘΒͳ͍ͷͰ͕Δ • GCΛ͍ͬͯΔͱɺʮෆඞཁʹͳͬͨ(ղ์͞Εͨ)ʯ࣌ ͰɺϦιʔε͕আ͞ΕΔ • ʮ͍ऴΘͬͯղ์͠ͳ͍ʯΑ͏ʹ͢Δ͕͍Δ ݸ্ݶͷ͋ΔϦιʔεΛ͍·Θ͠ɺۭ͖͕ͳ͚ΕͨͤΔྫ →
ຊͷʹΓ·͢
࡞ͬͯͶ˒ • ωοτϫʔΫΛ௨ͯ͡ΞϨίϨ͢ΔγεςϜ • (TCP/IPܦ༝ͰϝΠϯϑϨʔϜͱ௨৴͢Δ • ΫϥΠΞϯτ -> [ίίΛ࡞Δ] ->
ϝΠϯϑϨʔϜ • ϦΫΤετ͝ͱͷԠ͕࣌ؒ৳ͼͯɺಉ࣌ॲཧΛଟ͘ ͍ͨ͠ • : ϝΠϯϑϨʔϜͷଓΛԿݸ։͚ΔΜͩɾɾɾʁ
͜͏ͬͯ࡞Ζ͏˒ • ͱΓ͋͑ͣʮܨ͍ͰɺΓͱΓͯ͠ɺ͖ͬͯͨσʔλΛ ॲཧ͢ΔʯΈ͍ͨͳ෦Λ࡞ͬͪΌ͍͍ͨ • ΦϒδΣΫτ(ଓ)ͷ্ݶઈରʹઃ͚Δʂʂ • ʮԿݸ։͚Δ͔͔Βͳ͍ʯ͔ΒɺʮޙͰ؆୯ʹม͑ΒΕ ΔΑ͏ʹʯ͓ͯ͘͠ ➡ʮΘ͔Βͳ͍ॴΛޙճ͠ʹ͓͚ͯ͠Δ(அΛԆͤ͞Δઃ
ܭߦҝ)ʯΛ͓͚ͯ͠ɺ։ൃऀ҆৺҆શͬͯϫέʂ
ͦ͜ͰObject PoolͰ͢Α ଓΦϒδΣΫτ(Port)ͱɺ ͦΕΛཧ͢Δϓʔϧ(PortManager)Λ࡞ͨ͠ • PortManagerάϩʔόϧʹ1ݸ͚ͩଘࡏ͢Δ • Singletonͷར༻ • PortManagerɺPortͷੜɾཧΛ୲
• ੜɾฦ٫ɾ(ҟৗ࣌ͷ)ഁغͳͲ
PoolͷͱClientͷ • Clientͷؔ৺ʮ͑ΔPortΛΑͤ͜ʯͱ͍͏ • ʮੜ(factory)ʯΛPoolʹͤΔͱ͍͏͜ͱɺੜ͕ʮ ͑Δʯঢ়ଶʹ͋Δͱ͍͏͜ͱ·ͰPool͕ཧग़དྷΔͱ͍͏͜ͱ • ʮ࡞Δ͜ͱʯͰͳͯ͘ʮ४උ͠ɺఏڙ͢Δ͜ͱʯ͕ • ʮବʹͳͬͨPortೖΕସ͑Δʯͱ͔ɻ
• Clientʮ͑ΔͷΛཁٻ͠ଓ͚ͯɺࣗΒͷతΛୡ͢Δʯ ͚ͩͰΑ͍
ͱ։ൃ • ʮͷʯʮநʹΑΔઃܭʯʮΧϓηϧԽʯ͕࣮ݱ͞Ε Δ͜ͱͰɺʮ۩ମͷஅʯΛޙճ͠ʹͰ͖Δ • ௨৴࣌ΤϥʔͲ͏ѻ͓͏ɾɾʁͱ͔΄΅ؾʹͤͣɺͻͱ ·ͣʮ௨৴͕Ͱ͖ΔલఏʯͰ(Clientͷ)ϩδοΫͷ࣮ΛਐΊ ΒΕΔ • ʮ͍·ؾʹ͠ͳͯ͘ྑ͍͜ͱʯʮ۩ମʯͰ͋Δ֖વੑ͕ߴ͍ɻ
• ۩ମৄࡉͬͯ͜ͱʮมಈੑʯͰ͋Δ֖વੑ͕ߴ͍ɻ • ʮมಈੑΛΧϓηϧԽͤΑʯͱ͍͏ઃܭ