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
150
オブジェクト指向のこころ: 第22章 / DESIGN PATTERNS EXPLAINED: chapter-22
会社で「オブジェクト指向のこころ」の読書会をやっています
hideki kinjyo
PRO
February 03, 2022
Tweet
Share
More Decks by hideki kinjyo
See All by hideki kinjyo
色んなオートローダーを覗き見る #phpcon_okinawa
o0h
PRO
5
460
ヒューマンエラーの本を読んだ ~報告会~
o0h
PRO
3
240
みんなでワイワイ「テスト駆動開発」の話をやる会 #techramen24conf
o0h
PRO
3
460
SPLから始める「データ構造」入門
o0h
PRO
7
1.7k
PHPUnit11の新しい仲間たち
o0h
PRO
3
330
単体テストを書かない技術 #phpcon_odawara
o0h
PRO
60
20k
パンフ記事 「初めてのリファクタリング!」 の裏側 #phperkaigi
o0h
PRO
2
140
phpunit/php-code-coverageって何をしてるんだ #phperkaigi
o0h
PRO
3
1.2k
Composerを便利に使うために私がやっていること #phperkaigi
o0h
PRO
1
2.4k
Other Decks in Programming
See All in Programming
Why Jakarta EE Matters to Spring - and Vice Versa
ivargrimstad
0
1.1k
リアーキテクチャxDDD 1年間の取り組みと進化
hsawaji
1
220
【Kaigi on Rails 2024】YOUTRUST スポンサーLT
krpk1900
1
330
AI時代におけるSRE、 あるいはエンジニアの生存戦略
pyama86
6
1.1k
AWS Lambdaから始まった Serverlessの「熱」とキャリアパス / It started with AWS Lambda Serverless “fever” and career path
seike460
PRO
1
260
Laravel や Symfony で手っ取り早く OpenAPI のドキュメントを作成する
azuki
2
120
C++でシェーダを書く
fadis
6
4.1k
[Do iOS '24] Ship your app on a Friday...and enjoy your weekend!
polpielladev
0
100
Compose 1.7のTextFieldはPOBox Plusで日本語変換できない
tomoya0x00
0
190
subpath importsで始めるモック生活
10tera
0
300
ふかぼれ!CSSセレクターモジュール / Fukabore! CSS Selectors Module
petamoriken
0
150
LLM生成文章の精度評価自動化とプロンプトチューニングの効率化について
layerx
PRO
2
190
Featured
See All Featured
Facilitating Awesome Meetings
lara
50
6.1k
Imperfection Machines: The Place of Print at Facebook
scottboms
265
13k
5 minutes of I Can Smell Your CMS
philhawksworth
202
19k
Producing Creativity
orderedlist
PRO
341
39k
Optimizing for Happiness
mojombo
376
70k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
6
410
Designing Dashboards & Data Visualisations in Web Apps
destraynor
229
52k
A Tale of Four Properties
chriscoyier
156
23k
Build The Right Thing And Hit Your Dates
maggiecrowley
33
2.4k
Code Reviewing Like a Champion
maltzj
520
39k
Building Applications with DynamoDB
mza
90
6.1k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
4
370
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ͷ)ϩδοΫͷ࣮ΛਐΊ ΒΕΔ • ʮ͍·ؾʹ͠ͳͯ͘ྑ͍͜ͱʯʮ۩ମʯͰ͋Δ֖વੑ͕ߴ͍ɻ
• ۩ମৄࡉͬͯ͜ͱʮมಈੑʯͰ͋Δ֖વੑ͕ߴ͍ɻ • ʮมಈੑΛΧϓηϧԽͤΑʯͱ͍͏ઃܭ