Мне было интересно, в каких случаях действительно необходимо принять одноэлементный шаблон в objective-C (например, определить выделенный класс и создать один экземпляр), что использование класса как объекта не будет выполнено.
В частности, я думаю о следующем решении:
- Определить и использовать соответствующие методы класса вместо методов экземпляров для экземпляра singleton;
- Используйте переменные
static
(глобальные глобальные расширения), вместо переменных экземпляра экземпляра singleton; - Используйте объект класса при регистрации в качестве наблюдателя для уведомлений вместо экземпляра singleton. Хотя объект класса является объектом objective-C сам по себе (правильно?), Для этого требуется, чтобы обработчик уведомлений был методом класса; (возможно ли это?)
Например, вместо того, чтобы иметь объект Texture
(модельный объект) и a TextureManager
singleton (диспетчер ресурсов), вы могли бы создать или создать текстуру как методы класса и статические переменные того же класса Texture
(шаблон factory плюс некоторое управление ресурсами).
Любые мысли об этом дизайне?
EDIT:
Теперь, когда я думаю об этом и все еще в приведенном выше примере Texture
, даже если я удерживаю два класса отдельно (Texture
и TextureManager
), я должен выбрать между A. Имея диспетчерский синглтон и управляйте им с использованием методов экземпляра или B. Наличие менеджера неинтересным вспомогательным классом. Чтобы уточнить:
Texture* myTexture = [[TextureManager defaultManager] textureWithName:@"TextureName"];
// (singleton, client uses instance methods)
против
Texture* myTexture = [TextureManager textureWithName:@"TextureName"];
// (Class standing in for singleton, client uses class methods)
Последний выглядит более простым и менее громоздким/многословным, но мне интересно, какой дизайн является "более правильным". Конечно, первый позволяет более чем одному экземпляру TextureManager
возникнуть необходимость (не в моем случае).