Upgrade to Pro — share decks privately, control downloads, hide ads and more …

オブジェクト指向のこころ: 第22章 / DESIGN PATTERNS EXPLAINED: chapter-22

オブジェクト指向のこころ: 第22章 / DESIGN PATTERNS EXPLAINED: chapter-22

会社で「オブジェクト指向のこころ」の読書会をやっています

hideki kinjyo
PRO

February 03, 2022
Tweet

More Decks by hideki kinjyo

Other Decks in Programming

Transcript

  1. ୈ22ষ
 Object Poolύλʔϯ ՝୊ਤॻ:
 ΦϒδΣΫτࢦ޲ͷ͜͜Ζ: σβΠϯύλʔϯͱͱ΋ʹֶͿ

  2. ᴷେ·͔ʹݴ͑͹ɺΦϒδΣΫτϓʔϧύλʔϯ͸ɺ࢖͏΋ͷΛ ܾ·ͬͨ਺͚ͩɺݴ͍׵͑Ε͹ϓʔϧΛɺ࡞Δํ๏Ͱ͢ɻ GoݴޠʹΑΔฒߦॲཧ P59-60

  3. ͳΜͰͦΜͳࣄ͍ͨ͠ͷʁ • ΦϒδΣΫτͷੜ੒ίετ͕ߴ͘ɺ͋Μ·Γੜ੒ͨ͘͠Ͷʙͱ͍͏͕࣌͋ Δ(࡞Γஔ͖ˍ࢖͍·Θ͍ͨ͠) • ͜Ε͸SingletonͱࣅͨಈػͰ͢Ͷ • ੜ੒͞ΕΔ਺ʹ্ݶΛઃ͚͍ͨͳʙͱ͍͏͕࣌͋Δ(Ϧιʔε؅ཧΛγϏΞ) • (ʮੜ੒࣌ʹϝϞϦΛXXX

    KB֬อ͢ΔΑʯͬͯΦϒδΣΫτ͕ແݶʹ࡞ ΒΕͨΒࠔΔΜ͡Όɺͱ͔Ͱ) • ৽͘͠࡞Βͳ͍Ͱɺۭ͖͕ग़Δ·Ͱ଴ͬͯཉ͍͠ʂ • ओʹඇಉظॲཧΛѻ͏έʔεʹͯ༗༻
  4. Ͳ͏΍Δͷʁ • PoolΫϥε(Manager)Λͭ͘Δ • Pool͸ • ࢖͑ΔΦϒδΣΫτ(Ϧιʔε)Λɺۭ͖ঢ়ଶ͕Θ͔Δঢ়ଶ ͰஷΊΔ • ཁٻ͞ΕͨΒۭ͍͍ͯΔΦϒδΣΫτΛฦ͢

    • ࢖͍ऴΘͬͨΒΦϒδΣΫτΛฦͯ͠΋Β͏ • ར༻ऀ͸ɺΦϒδΣΫτͷऔಘΛPoolܦ༝Ͱߦ͏Α͏ʹ͢Δ
  5. Ϧιʔεͩ͘ ͍͞ʂ ͍͋Αʂ ͭऔΓग़͢ Α Ͳ͏ͧʙ ࢖͍ऴΘͬ ͨΑʂ ͍͋Αʂ ฦ͖ͬͯͨ

    Α
  6. Ϧιʔεͩ͘ ͍͞ʂ ͳ͍ͷͩ Θʂʂ ͭऔΓग़͢ Α Ͳ͏ͧʙ ଴ͬͯͶʂ ଴ͬͯͶʂ ଴ͬͯͶʂ

    ଴ͬͯͶʂ ଴ͬͯͶʂ ଴ͬͯͶʂ ,*5"ʂʂ ଴ͬͯͶʂ ࢖͍ऴΘͬ ͨΑʂ
  7. Pool͕ͳ͍ͱͲ͏ͳΔͷʁ • ར༻ऀͷ਺͚ͩʮੜ੒ʯͷॲཧ͕૸Δʂ • ੜ੒1ͭ1ͭʹύϫʔ͕ཁΔ • ͦͷ෼͚ͩࣗ਎΍઀ଓઌͷϦιʔεΛফඅ͢Δ • ͍͡ΘΔͳ؍఺: ʮϦιʔεͷফඅঢ়گʯΛ؂ࢹͯ͠ɺ଍Γ

    ͳ͔ͬͨΒͲ͏͜͏͢ΔʙΛ͢Ε͹Pool͠ͳ͍͍ͯ͘ʁ • ੜ੒ʹ࢖͏ύϫʔ͸มΘΒͳ͍ͷͰ໰୊͕࢒Δ • GCΛ࢖͍ͬͯΔͱɺʮෆඞཁʹͳͬͨ(ղ์͞Εͨ)ʯ࣌ ఺ͰɺϦιʔε͕࡟আ͞ΕΔ • ʮ࢖͍ऴΘͬͯ΋ղ์͠ͳ͍ʯΑ͏ʹ͢Δ޻෉͕͍Δ ݸ਺্ݶͷ͋ΔϦιʔεΛ࢖͍·Θ͠ɺۭ͖͕ͳ͚Ε͹଴ͨͤΔྫ →
  8. ຊͷ࿩ʹ໭Γ·͢

  9. ࡞ͬͯͶ˒ • ωοτϫʔΫΛ௨ͯ͡ΞϨίϨ͢ΔγεςϜ • (TCP/IPܦ༝ͰϝΠϯϑϨʔϜͱ௨৴͢Δ • ΫϥΠΞϯτ -> [ίίΛ࡞Δ] ->

    ϝΠϯϑϨʔϜ • ϦΫΤετ͝ͱͷԠ౴͕࣌ؒ৳ͼͯ΋ɺಉ࣌ॲཧ਺Λଟ͘ ͍ͨ͠ • ໰୊: ϝΠϯϑϨʔϜ΁ͷ઀ଓΛԿݸ։͚ΔΜͩɾɾɾʁ
  10. ͜͏΍ͬͯ࡞Ζ͏˒ • ͱΓ͋͑ͣʮܨ͍Ͱɺ΍ΓͱΓͯ͠ɺ໭͖ͬͯͨσʔλΛ ॲཧ͢ΔʯΈ͍ͨͳ෦෼Λ࡞ͬͪΌ͍͍ͨ • ΦϒδΣΫτ(઀ଓ)ͷ্ݶ͸ઈରʹઃ͚Δʂʂ • ʮԿݸ։͚Δ͔෼͔Βͳ͍ʯ͔ΒɺʮޙͰ؆୯ʹม͑ΒΕ ΔΑ͏ʹʯ͓ͯ͘͠ ➡ʮΘ͔Βͳ͍ॴΛޙճ͠ʹ͓͚ͯ͠Δ(൑அΛ஗Ԇͤ͞Δઃ

    ܭߦҝ)ʯΛ͓͚ͯ͠͹ɺ։ൃऀ΋҆৺҆શͬͯϫέʂ
  11. ͦ͜ͰObject PoolͰ͢Α ઀ଓΦϒδΣΫτ(Port)ͱɺ ͦΕΛ؅ཧ͢Δϓʔϧ(PortManager)Λ࡞੒ͨ͠ • PortManager͸άϩʔόϧʹ1ݸ͚ͩଘࡏ͢Δ • Singletonͷར༻ • PortManager͸ɺPortͷੜ੒ɾ؅ཧΛ୲౰

    • ੜ੒ɾฦ٫ɾ(ҟৗ࣌ͷ)ഁغͳͲ
  12. Poolͷ੹຿ͱClientͷ੹຿ • Clientͷؔ৺͸ʮ࢖͑ΔPortΛΑͤ͜ʯͱ͍͏఺ • ʮੜ੒(factory)ʯΛPoolʹ೚ͤΔͱ͍͏͜ͱ͸ɺੜ੒෺͕ʮ࢖ ͑Δʯঢ়ଶʹ͋Δͱ͍͏͜ͱ·ͰPool͕؅ཧग़དྷΔͱ͍͏͜ͱ • ʮ࡞Δ͜ͱʯͰ͸ͳͯ͘ʮ४උ͠ɺఏڙ͢Δ͜ͱʯ͕੹຿ • ʮବ໨ʹͳͬͨPort͸ೖΕସ͑Δʯͱ͔ɻ

    • Client͸ʮ࢖͑ΔͷΛཁٻ͠ଓ͚ͯɺࣗΒͷ໨తΛୡ੒͢Δʯ ͚ͩͰΑ͍
  13. ੹຿ͱ։ൃ • ʮ੹຿ͷ෼཭ʯʮந৅ʹΑΔઃܭʯʮΧϓηϧԽʯ͕࣮ݱ͞Ε Δ͜ͱͰɺʮ۩ମͷ൑அʯΛޙճ͠ʹͰ͖Δ • ௨৴࣌Τϥʔ͸Ͳ͏ѻ͓͏ɾɾʁͱ͔͸΄΅ؾʹͤͣɺͻͱ ·ͣʮ௨৴͕Ͱ͖ΔલఏʯͰ(Clientͷ)ϩδοΫͷ࣮૷ΛਐΊ ΒΕΔ • ʮ͍·ؾʹ͠ͳͯ͘ྑ͍͜ͱʯ͸ʮ۩ମʯͰ͋Δ֖વੑ͕ߴ͍ɻ

    • ۩ମ΍ৄࡉͬͯ͜ͱ͸ʮมಈੑʯͰ͋Δ֖વੑ͕ߴ͍ɻ • ʮมಈੑΛΧϓηϧԽͤΑʯͱ͍͏ઃܭ