Лучший способ спроектировать структуру кода многих синглетонов - PullRequest
0 голосов
/ 05 июня 2018

У меня есть много классов, спроектированных как ниже , и они должны быть доступны везде и в любое время (также как один экземпляр).В настоящее время я сделал это, используя пространство имен, в котором хранится указатель на все классы.Есть ли лучший способ решить / спроектировать такие проблемы / структуры?

// AbcManager.h
class AbcManager
{
public:
    void printTest();

private:
    char text[] = "Hello world";
}

// ManagerNamespace.h
namespace Manager
{
    AbcManager* abc;
}

// somewhere.h
{
    Manager::abc->printTest();
}

Ответы [ 2 ]

0 голосов
/ 05 июня 2018

Требуются два реквизита:

  • SRP
  • Читаемость

После тщательного осмысления становится ясно, что SRP не является проблемой, поскольку, как указано в ОП:

они должны быть доступны везде в любое время

Это означает, что абсолютно не нужно иметь отдельные объекты.Если в пространстве имен хранятся все указатели, но инициализация различных объектов выполняется по стеку?В любое время некоторые могут отсутствовать, указывая на ноль.Это оставляет только следующие тривиальные возможности:

  • Без скрытия информации: вложенные пространства имен, заключающие в себе статические функции и переменные.
  • С сокрытием информации: один «большой» класс менеджера-одиночки.Для дополнительной читабельности используйте префиксы в именах переменных и функций-членов.
  • Сохраните то, что у вас уже есть

Я бы рекомендовал проводить различие между одноэлементным (объект, который может иметь толькоодин экземпляр) и обычный объект, экземпляр которого создается только один раз вашим кодом (последний не одноэлементный).

0 голосов
/ 05 июня 2018

Подойдет ли шаблон, учитывая, что у вас "много классов, разработанных как показано ниже".Просто создайте каждый шаблон с нужным вам параметром type / nontype.Не уверен, если это то, что вы спрашиваете, хотя.

...