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ύλʔϯ
    ՝୊ਤॻ:

    ΦϒδΣΫτࢦ޲ͷ͜͜Ζ: σβΠϯύλʔϯͱͱ΋ʹֶͿ

    View Slide

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

    View Slide

  3. ͳΜͰͦΜͳࣄ͍ͨ͠ͷʁ
    • ΦϒδΣΫτͷੜ੒ίετ͕ߴ͘ɺ͋Μ·Γੜ੒ͨ͘͠Ͷʙͱ͍͏͕࣌͋
    Δ(࡞Γஔ͖ˍ࢖͍·Θ͍ͨ͠)
    • ͜Ε͸SingletonͱࣅͨಈػͰ͢Ͷ
    • ੜ੒͞ΕΔ਺ʹ্ݶΛઃ͚͍ͨͳʙͱ͍͏͕࣌͋Δ(Ϧιʔε؅ཧΛγϏΞ)
    • (ʮੜ੒࣌ʹϝϞϦΛXXX KB֬อ͢ΔΑʯͬͯΦϒδΣΫτ͕ແݶʹ࡞
    ΒΕͨΒࠔΔΜ͡Όɺͱ͔Ͱ)
    • ৽͘͠࡞Βͳ͍Ͱɺۭ͖͕ग़Δ·Ͱ଴ͬͯཉ͍͠ʂ
    • ओʹඇಉظॲཧΛѻ͏έʔεʹͯ༗༻

    View Slide

  4. Ͳ͏΍Δͷʁ
    • PoolΫϥε(Manager)Λͭ͘Δ
    • Pool͸
    • ࢖͑ΔΦϒδΣΫτ(Ϧιʔε)Λɺۭ͖ঢ়ଶ͕Θ͔Δঢ়ଶ
    ͰஷΊΔ
    • ཁٻ͞ΕͨΒۭ͍͍ͯΔΦϒδΣΫτΛฦ͢
    • ࢖͍ऴΘͬͨΒΦϒδΣΫτΛฦͯ͠΋Β͏
    • ར༻ऀ͸ɺΦϒδΣΫτͷऔಘΛPoolܦ༝Ͱߦ͏Α͏ʹ͢Δ

    View Slide

  5. Ϧιʔεͩ͘
    ͍͞ʂ
    ͍͋Αʂ
    ͭऔΓग़͢
    Α
    Ͳ͏ͧʙ
    ࢖͍ऴΘͬ
    ͨΑʂ
    ͍͋Αʂ
    ฦ͖ͬͯͨ
    Α

    View Slide

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

    View Slide

  7. Pool͕ͳ͍ͱͲ͏ͳΔͷʁ
    • ར༻ऀͷ਺͚ͩʮੜ੒ʯͷॲཧ͕૸Δʂ
    • ੜ੒1ͭ1ͭʹύϫʔ͕ཁΔ
    • ͦͷ෼͚ͩࣗ਎΍઀ଓઌͷϦιʔεΛফඅ͢Δ
    • ͍͡ΘΔͳ؍఺: ʮϦιʔεͷফඅঢ়گʯΛ؂ࢹͯ͠ɺ଍Γ
    ͳ͔ͬͨΒͲ͏͜͏͢ΔʙΛ͢Ε͹Pool͠ͳ͍͍ͯ͘ʁ
    • ੜ੒ʹ࢖͏ύϫʔ͸มΘΒͳ͍ͷͰ໰୊͕࢒Δ
    • GCΛ࢖͍ͬͯΔͱɺʮෆඞཁʹͳͬͨ(ղ์͞Εͨ)ʯ࣌
    ఺ͰɺϦιʔε͕࡟আ͞ΕΔ
    • ʮ࢖͍ऴΘͬͯ΋ղ์͠ͳ͍ʯΑ͏ʹ͢Δ޻෉͕͍Δ
    ݸ਺্ݶͷ͋ΔϦιʔεΛ࢖͍·Θ͠ɺۭ͖͕ͳ͚Ε͹଴ͨͤΔྫ →

    View Slide

  8. ຊͷ࿩ʹ໭Γ·͢

    View Slide

  9. ࡞ͬͯͶ˒
    • ωοτϫʔΫΛ௨ͯ͡ΞϨίϨ͢ΔγεςϜ
    • (TCP/IPܦ༝ͰϝΠϯϑϨʔϜͱ௨৴͢Δ
    • ΫϥΠΞϯτ -> [ίίΛ࡞Δ] -> ϝΠϯϑϨʔϜ
    • ϦΫΤετ͝ͱͷԠ౴͕࣌ؒ৳ͼͯ΋ɺಉ࣌ॲཧ਺Λଟ͘
    ͍ͨ͠
    • ໰୊: ϝΠϯϑϨʔϜ΁ͷ઀ଓΛԿݸ։͚ΔΜͩɾɾɾʁ

    View Slide

  10. ͜͏΍ͬͯ࡞Ζ͏˒
    • ͱΓ͋͑ͣʮܨ͍Ͱɺ΍ΓͱΓͯ͠ɺ໭͖ͬͯͨσʔλΛ
    ॲཧ͢ΔʯΈ͍ͨͳ෦෼Λ࡞ͬͪΌ͍͍ͨ
    • ΦϒδΣΫτ(઀ଓ)ͷ্ݶ͸ઈରʹઃ͚Δʂʂ
    • ʮԿݸ։͚Δ͔෼͔Βͳ͍ʯ͔ΒɺʮޙͰ؆୯ʹม͑ΒΕ
    ΔΑ͏ʹʯ͓ͯ͘͠
    ➡ʮΘ͔Βͳ͍ॴΛޙճ͠ʹ͓͚ͯ͠Δ(൑அΛ஗Ԇͤ͞Δઃ
    ܭߦҝ)ʯΛ͓͚ͯ͠͹ɺ։ൃऀ΋҆৺҆શͬͯϫέʂ

    View Slide

  11. ͦ͜ͰObject PoolͰ͢Α
    ઀ଓΦϒδΣΫτ(Port)ͱɺ
    ͦΕΛ؅ཧ͢Δϓʔϧ(PortManager)Λ࡞੒ͨ͠
    • PortManager͸άϩʔόϧʹ1ݸ͚ͩଘࡏ͢Δ
    • Singletonͷར༻
    • PortManager͸ɺPortͷੜ੒ɾ؅ཧΛ୲౰
    • ੜ੒ɾฦ٫ɾ(ҟৗ࣌ͷ)ഁغͳͲ

    View Slide

  12. Poolͷ੹຿ͱClientͷ੹຿
    • Clientͷؔ৺͸ʮ࢖͑ΔPortΛΑͤ͜ʯͱ͍͏఺
    • ʮੜ੒(factory)ʯΛPoolʹ೚ͤΔͱ͍͏͜ͱ͸ɺੜ੒෺͕ʮ࢖
    ͑Δʯঢ়ଶʹ͋Δͱ͍͏͜ͱ·ͰPool͕؅ཧग़དྷΔͱ͍͏͜ͱ
    • ʮ࡞Δ͜ͱʯͰ͸ͳͯ͘ʮ४උ͠ɺఏڙ͢Δ͜ͱʯ͕੹຿
    • ʮବ໨ʹͳͬͨPort͸ೖΕସ͑Δʯͱ͔ɻ
    • Client͸ʮ࢖͑ΔͷΛཁٻ͠ଓ͚ͯɺࣗΒͷ໨తΛୡ੒͢Δʯ
    ͚ͩͰΑ͍

    View Slide

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

    View Slide