Кіріспе

Объектілер үшін бағдарламалық жасақтама үлгісі

Компьютерлік бағдарламалауда, жеңілдетілген бағдарламалық жасақтама үлгісі – жадты үнемдеу үшін өзінің кейбір деректерін басқа ұқсас объектілермен бөлісетін объектіні білдіреді. Жеңілдетілген үлгі – GoF дизайнының жиырма үш танымал үлгілерінің бірі. Бұл үлгілер икемді, объектіге бағытталған бағдарламалық жасақтаманы құруға көмектеседі, оны іске асыру, өзгерту, тестілеу және қайта пайдалану оңай. Басқа контексттерде дерек құрылымдарын ортақ пайдалану идеясы хэш консинг деп аталады. Бұл термин алғаш рет Пол Кальдер мен Марк Линтон 1990 жылы WYSIWYG құжат редакторында глифтік ақпаратты тиімді өңдеу үшін қолданылған. Дегенмен, ұқсас техникалар 1988 жылдан бері басқа жүйелерде де қолданылып келеді.

Жүзеге асырудың егжей-тегжейлі сипаттамасы

Ұш салмағы үлгісін іске асырудың бірнеше тәсілі бар. Мысалы, өзгертілгіштік: сыртқы ұш салмағы күйін сақтайтын нысандар өзгертілуі мүмкін бе. Өзгертілмейтін нысандарды оңай бөлісуге болады, бірақ күйде өзгеріс болған сайын жаңа сыртқы нысандар құру қажет. Ал өзгертілгіш нысандар күйді бөлісе алады. Өзгертілгіштік, ескі, пайдаланылмаған нысандарды кэштеу және қайта инициализациялау арқылы нысандарды қайта пайдалануға жағдай жасайды. Күйі өте өзгергіш болғанда бөлісу көбінесе мүмкін емес. Басқа маңызды мәселелерге: ұш салмақты алу (соңғы клиент оған қалай қол жеткізеді), кэштеу және параллелизм жатады.

Қайта алу

Ұш салмақты объектілерді жасау немесе қайта пайдалану үшін фабрика интерфейсі көбінесе күрделі жатқан жүйенің сыртқы көрінісі болып табылады. Мысалы, фабрика интерфейсі әдетте, Ұш салмақтықтарды (flyweights) құру үшін жаһандық қолжетімділікті қамтамасыз ету мақсатында жеке дана (singleton) ретінде іске асырылады. Жалпы айтқанда, іздеу алгоритмі фабрика интерфейсі арқылы жаңа объектіні сұраудан басталады. Сұрау әдетте, объектінің түріне қарай тиісті кэшке жіберіледі. Егер сұрау кэштегі объектімен қанағаттандырылса, ол қайта инициализацияланып қайтарылуы мүмкін. Әйтпесе, жаңа объект құрылады. Егер объект бірнеше сыртқы құрамдас бөліктерге бөлінген болса, олар объекті қайтарылмас бұрын біріктіріледі.

Кэштеу

Ұш салмақты нысандарды кэшке сақтаудың екі тәсілі бар: күтіліп тұратын және күтілмейтін кэштер. Күйде жиі өзгеріс болатын нысандарды FIFO құрылымымен кэшке сақтауға болады. Бұл құрылым кэште іздеу қажеттілігін жоққа шығарып, пайдаланылмаған нысандарды сақтайды. Керісінше, күтілмейтін кэштерде алдын ала шығындар аз: кэштердегі нысандар компиляция немесе жүктелу кезінде бірден жасалады. Нысандар кэшке орналасқаннан кейін, нысанды алу алгоритмі күтіліп тұратын кэштің қосу/алу операцияларына қарағанда көп жүктемеге ие болуы мүмкін. Өзгермейтін күйі бар сыртқы нысандарды алу кезінде, қалаған күйдегі нысанды кэште іздеу жеткілікті. Егер мұндай нысан табылмайтын болса, сол күйдегі нысан инициализациялануы керек. Өзгермелі күйі бар сыртқы нысандарды алу кезінде, пайдаланылмаған нысанды қайта инициализациялау үшін кэште іздеу қажет, егер пайдаланылған нысан табылмайтын болса. Егер пайдаланылмаған нысан болмаса, жаңа нысан жасалып, кэшке қосылуы керек. Сыртқы нысанның әрбір бірегей кіші класы үшін жеке кэштерді пайдалануға болады. Көптеген кэштерді әр кэшке бірегей іздеу алгоритмін қосып, жеке-жеке оңтайландыруға болады. Бұл нысанды кэштеу жүйесі жауапкершілік тізбегі үлгісімен қапталануы мүмкін, бұл компоненттер арасындағы байланыстың әлсіздігін қамтамасыз етеді.