Сравнивайте с английским: нажмите на абзац — оригинал откроется в окне. Кнопка EN под абзацем показывает его прямо в тексте.
Содержание
Введение
Модель проектирования программного обеспечения
Software engineering design pattern
В области разработки программного обеспечения, паттерн "мультитон" является паттерном проектирования, который обобщает паттерн "синглетон". В то время как "синглетон" позволяет создать только один экземпляр класса, паттерн "мультитон" обеспечивает контролируемое создание нескольких экземпляров, управляя ими посредством использования карты (словаря). Вместо одного экземпляра на всё приложение (например, объекта в языке программирования Java), паттерн "мультитон" гарантирует наличие одного экземпляра для каждого ключа. Паттерн "мультитон" не представлен явно как отдельный паттерн в авторитетном учебнике по объектно-ориентированному программированию "Design Patterns". Однако в книге описывается использование реестра "синглетонов" для обеспечения возможности наследования от "синглетонов", что по сути является реализацией паттерна "мультитон".
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.
Описание
Хотя может показаться, что мультитон – это хеш-таблица с синхронизированным доступом, есть два важных отличия. Во-первых, мультитон не позволяет клиентам добавлять соответствия. Во-вторых, мультитон никогда не возвращает нулевую или пустую ссылку; вместо этого он создает и хранит экземпляр мультитона при первом запросе с соответствующим ключом. Последующие запросы с тем же ключом возвращают исходный экземпляр. Хеш-таблица – это лишь деталь реализации, а не единственный возможный подход. Этот шаблон упрощает получение общих объектов в приложении. Поскольку пул объектов создается только один раз, являясь членом, связанным с классом (а не с экземпляром), мультитон сохраняет свою плоскую структуру, а не превращается в древовидную. Уникальность мультитона заключается в том, что он обеспечивает централизованный доступ к единому каталогу (то есть все ключи находятся в одном пространстве имен) мультитонов, где каждый экземпляр мультитона в пуле может существовать, имея собственное состояние. Таким образом, этот шаблон поддерживает индексированное хранение важных для системы объектов (например, как это делает система 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.
Недостатки
Эта модель, как и паттерн Singleton, значительно усложняет модульное тестирование, поскольку вносит глобальное состояние в приложение. В языках с автоматической сборкой мусора это может стать причиной утечек памяти, так как создаёт глобальные сильные ссылки на объекты.
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.