Бағдарламалық инженериядағы Multiton үлгісі – Singleton үлгісінің кеңейтілген нұсқасы. Бірнеше инстанцияны басқаруға, әрбір кілт үшін бір ғана инстанцияны қамтамасыз етуге көмектеседі.
Ағылшыншамен салыстырыңыз: абзацты басыңыз — түпнұсқа терезеде ашылады. Абзац астындағы EN түймесі оны мәтін ішінде көрсетеді.
Мазмұны
Кіріспе
Бағдарламалық жасақтаманы жобалау үлгісі
Software engineering design pattern
Бағдарламалық жасақтама саласында, мультитон үлгісі – бұл синглтон үлгісін жалпылайтын жобалау үлгісі. Синглтон бір сыныптың тек бір ғана инстанциясын жасауға рұқсат берсе, мультитон үлгісі бірнеше инстанцияның бақырулы түрде жасалуына мүмкіндік береді және оларды карта арқылы басқарады. Бір қолданбаға бір инстанциядан (мысалы, Java бағдарламалау тіліндегі объект) гөрі, мультитон үлгісі әрбір кілт үшін бір инстанцияны қамтамасыз етеді. Көптонды үлгі жоғары бағаланған объектіге бағытталған бағдарламалау оқулығындағы "Үлгілер" кітабында жеке үлгі ретінде нақты көрсетілмеген. Дегенмен, кітапта синглтонды кіші сыныптарға бөлуге арналған синглтон тізілімін пайдалану туралы айтылған, бұл мәні бойынша мультитон үлгісі болып табылады.
In software engineering, the multiton pattern is a design pattern which generalizes the singleton pattern. Whereas the singleton allows only one instance of a class to be created, the multiton pattern allows for the controlled creation of multiple instances, which it manages through the use of a map. Rather than having a single instance per application (e. g. the object in the Java programming language) the multiton pattern instead ensures a single instance per key. The multiton pattern does not explicitly appear as a pattern in the highly regarded object oriented programming textbook Design Patterns. However, the book describes using a registry of singletons to allow subclassing of singletons, which is essentially the multiton pattern.
Сипаттама
Көптонды синхронды қолжетімділігі бар хэш-кесте сияқты көрінсе де, екі маңызды айырмашылық бар. Біріншіден, мультитон клиенттерге байланыстарды (mapping) қосуға рұқсат бермейді. Екіншіден, мультитон ешқашан null немесе бос сілтеме қайтармайды; керісінше, ол алғашқы сұрау кезінде сәйкес кілтпен мультитон экземплярын жасап, сақтайды. Сол кілтпен келесі сұраулар бастапқы экземплярды қайтарады. Хэш-кесте – тек іске асылудың бір жолы ғана, жалғыз мүмкін тәсіл емес. Бұл үлгі қолданбадағы ортақ нысандарды алуды жеңілдетеді. Объекттер жиыны (pool) бір рет ғана құрылатындықтан және сыныпқа (экземпляр емес) байланысты мүше болғандықтан, мультитон ағаш тәрізді құрылымға айналудың орнына өзінің жазық мінез-құлқын сақтайды. Мультитонның ерекшелігі – ол мультитонның жалғыз каталогына орталықтандырылған қолжетімділікті қамтамасыз етеді (яғни, барлық кілттер бір атау кеңістігінде болады), ал жиындағы әр мультитон экземпляры өз күйін сақтай алады. Осылайша, бұл үлгі жүйе үшін маңызды объектілерді индекстелген түрде сақтауды ұсынады (мысалы, LDAP жүйесі сияқты). Дегенмен, мультитонды көптеген таратылған жүйелерде пайдалануға қарағанда, бір жүйеде кеңінен қолданумен шектеледі.
While it may appear that the multiton is a hash table with synchronized access there are two important distinctions. First, the multiton does not allow clients to add mappings. Secondly, the multiton never returns a null or empty reference; instead, it creates and stores a multiton instance on the first request with the associated key. Subsequent requests with the same key return the original instance. A hash table is merely an implementation detail and not the only possible approach. The pattern simplifies retrieval of shared objects in an application. Since the object pool is created only once, being a member associated with the class (instead of the instance), the multiton retains its flat behavior rather than evolving into a tree structure. The multiton is unique in that it provides centralized access to a single directory (i. e. all keys are in the same namespace, per se) of multitons, where each multiton instance in the pool may exist having its own state. In this manner, the pattern advocates indexed storage of essential objects for the system (such as would be provided by an LDAP system, for example). However, a multiton is limited to wide use by a single system rather than a myriad of distributed systems.
Кемшіліктері
Бұл үлгі, Синглтон үлгісі сияқты, бірліктерді сынауды әлдеқайда қиындатады, себебі ол қосымшаға жаһандық күй енгізеді. Автоматикалық жадты басқару тілдерінде, ол объектілерге жаһандық күшті сілтемелерді қосып, жад ағуына себеп болуы мүмкін.
This pattern, like the Singleton pattern, makes unit testing far more difficult, as it introduces global state into an application. With garbage collected languages it may become a source of memory leaks as it introduces global strong references to the objects.