会社で「オブジェクト指向のこころ」の読書会をやっています
ୈ22ষ Object Poolύλʔϯ՝ਤॻ: ΦϒδΣΫτࢦͷ͜͜Ζ: σβΠϯύλʔϯͱͱʹֶͿ
View Slide
ᴷେ·͔ʹݴ͑ɺΦϒδΣΫτϓʔϧύλʔϯɺ͏ͷΛܾ·͚ͬͨͩɺݴ͍͑ΕϓʔϧΛɺ࡞Δํ๏Ͱ͢ɻ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ͷ)ϩδοΫͷ࣮ΛਐΊΒΕΔ• ʮ͍·ؾʹ͠ͳͯ͘ྑ͍͜ͱʯʮ۩ମʯͰ͋Δ֖વੑ͕ߴ͍ɻ• ۩ମৄࡉͬͯ͜ͱʮมಈੑʯͰ͋Δ֖વੑ͕ߴ͍ɻ• ʮมಈੑΛΧϓηϧԽͤΑʯͱ͍͏ઃܭ