Это как раз работает jQuery.
$("#something")
Объект 0 = div # something length = 1 jquery = 1.2.6
$("#nothing")
Длина объекта = 0 jquery = 1.2.6
Поскольку они - в основном объектно-ориентированные глобальные переменные, можно обычно разрабатывать классы таким способом так, чтобы Вам не были нужны они.
Я думаю, что беспорядок вызывается тем, что люди не знают реальное приложение Шаблона "одиночка". Я не могу подчеркнуть это достаточно. Singleton не шаблон для обертывания globals. Шаблон "одиночка" должен только использоваться, чтобы гарантировать, что один и только один экземпляр данного класса существует в течение времени выполнения.
Люди думают, что Singleton является злой, потому что они используют ее для globals. Именно из-за этого беспорядка на Singleton смотрят вниз. Не путайте Одиночные элементы и globals. Если используется для цели это было предназначено для, Вы получите экстремальную выгоду из Шаблона "одиночка".
Некоторые контрапункты от автора:
Вы застреваете, если необходимо сделать класс не единственным в будущем Нисколько - я был в этой ситуации с одиночным элементом соединения единой базы данных, что я хотел превратиться в пул соединения. Помните, что к каждому одиночному элементу получают доступ через стандартный метод:
MyClass.instance
Это подобно подписи метода фабрики. Все, что я сделал, было обновить метод экземпляра возвратить следующее соединение из пула - никакие другие требуемые изменения. Это было бы намного более твердо, если бы мы не использовали одиночный элемент.
Одиночные элементы являются просто необычным globals, не Может спорить с этим, но так все статические поля и методы - что-нибудь, к чему получают доступ от класса, а не экземпляр чрезвычайно глобален, и я не вижу так много pushback на использовании статических полей?
Не высказывание, что Одиночные элементы хороши, просто пододвинув обратно в части 'расхожего мнения' здесь.
Синглтоны - это НЕ плохо. Это плохо только тогда, когда вы делаете что-то глобально уникальным, что не является глобально уникальным.
Однако существуют "сервисы области применения" (подумайте о системе обмена сообщениями, которая заставляет компоненты взаимодействовать) - это ПРИЗЫВАЕТ к использованию синглтона, "MessageQueue" - класса, который имеет метод "SendMessage(...)".
Затем вы можете делать следующее отовсюду:
MessageQueue.Current.SendMessage(new MailArrivedMessage(...));
И, конечно, делать:
MessageQueue.Current.RegisterReceiver(this);
в классах, реализующих IMessageReceiver.