В чем причина имен принадлежностей Singleton? - PullRequest
8 голосов
/ 17 февраля 2011

В течение нескольких проектов я написал приличное количество методов фабрики классов для доступа к экземпляру Singleton класса.Я всегда использовал некоторые вариации + (id)sharedSomething; соглашения об именах.

Apple, с другой стороны, имеет различные соглашения об именах.Например:

// NSNotificationCenter
+ (id)defaultCenter;

// NSUserDefaults
+ (NSUserDefaults *)standardUserDefaults;

// UIApplication
+ (UIApplication *)sharedApplication;

Существует ли какая-либо рифма или причина для прилагательного, помещенного перед существительным в тех именах, о которых я должен знать, называя мои собственные методы?Первоначально я думал, что это может быть связано с «гибкими» и «строгими» одноэлементными проектами, но NSFileManager и NSNotificationCenter оба следуют соглашению + (id) defaultSomething, но NSFileManager поддерживает распределение других экземпляров, а NSNotificationCenter - нет.Я в замешательстве.

РЕДАКТИРОВАТЬ: Я был не прав, думая, что NSNotificationCenter не поддерживает создание новых центров.Это просто не очень распространено, поэтому первоначальная гипотеза не обязательно опровергается.

Ответы [ 3 ]

5 голосов
/ 17 февраля 2011

Как правило, shared… методы предназначены для настоящих одиночных игр (NSApplication, NSWorkspace и т. Д.), Тогда как default… или standard… обозначает класс, который может быть полезен для создания экземпляра, но где большинство клиентов будут довольны только работой с единый глобальный экземпляр. Но общепринятого письменного стандарта не существует, и, кажется, в первую очередь это решение принималось всякий раз, когда был написан такой класс.

2 голосов
/ 17 февраля 2011

По всей вероятности, я нашел эту позицию по теме из книги Разработка приложений для iPhone Крейга Хокенберри:

К сожалению, не существует единого стандарта для именования синглетонов.Старые классы, такие как в фундаменте, используют префикс default в имени метода.Более новые классы, как правило, используют shared в качестве префикса.

Я приведу его в качестве альтернативы ответу, опубликованному @Chuck.Похоже, что в итоге нет никакой реальной картины, в то время как Чак указывает на грубую корреляцию между настоящими синглетонами и объектами, которые обычно используются как синглтоны, а мистер Хокенберри указывает на грубую корреляцию в возрасте.

1 голос
/ 17 февраля 2011

Это не имеет ничего общего с «гибкими» и «строгими» одноэлементными конструкциями. NSNotificationCenter и NSUserDefaults даже не являются синглетонами. Вы действительно думаете, что FlexibleSingleNotificationCenter - лучшее имя, чем defaultCenter? Есть ли какой-то единственный способ, которым он помогает пользователю метода узнать, как он реализован?

NSDeteriministicFiniteStateMachineToggleВыбрать кого-нибудь?

...