Введение

Модель проектирования программного обеспечения

В области разработки программного обеспечения, паттерн "мультитон" является паттерном проектирования, который обобщает паттерн "синглетон". В то время как "синглетон" позволяет создать только один экземпляр класса, паттерн "мультитон" обеспечивает контролируемое создание нескольких экземпляров, управляя ими посредством использования карты (словаря). Вместо одного экземпляра на всё приложение (например, объекта в языке программирования Java), паттерн "мультитон" гарантирует наличие одного экземпляра для каждого ключа. Паттерн "мультитон" не представлен явно как отдельный паттерн в авторитетном учебнике по объектно-ориентированному программированию "Design Patterns". Однако в книге описывается использование реестра "синглетонов" для обеспечения возможности наследования от "синглетонов", что по сути является реализацией паттерна "мультитон".

Описание

Хотя может показаться, что мультитон – это хеш-таблица с синхронизированным доступом, есть два важных отличия. Во-первых, мультитон не позволяет клиентам добавлять соответствия. Во-вторых, мультитон никогда не возвращает нулевую или пустую ссылку; вместо этого он создает и хранит экземпляр мультитона при первом запросе с соответствующим ключом. Последующие запросы с тем же ключом возвращают исходный экземпляр. Хеш-таблица – это лишь деталь реализации, а не единственный возможный подход. Этот шаблон упрощает получение общих объектов в приложении. Поскольку пул объектов создается только один раз, являясь членом, связанным с классом (а не с экземпляром), мультитон сохраняет свою плоскую структуру, а не превращается в древовидную. Уникальность мультитона заключается в том, что он обеспечивает централизованный доступ к единому каталогу (то есть все ключи находятся в одном пространстве имен) мультитонов, где каждый экземпляр мультитона в пуле может существовать, имея собственное состояние. Таким образом, этот шаблон поддерживает индексированное хранение важных для системы объектов (например, как это делает система LDAP). Однако мультитон предназначен для широкого использования в пределах одной системы, а не в множестве распределенных систем.

Недостатки

Эта модель, как и паттерн Singleton, значительно усложняет модульное тестирование, поскольку вносит глобальное состояние в приложение. В языках с автоматической сборкой мусора это может стать причиной утечек памяти, так как создаёт глобальные сильные ссылки на объекты.