Я часто использую синглтоны, потому что ненавижу передавать объект основного класса классам-членам, чтобы позволить им получить доступ к основному классу.
Class Foo
{
A* a;
B* b;
C* c;
};
Например, в приведенном выше примере, если A, B и C хотели бы получить доступ к Foo, мне нужно было бы передать объект Foo каждому из них и сохранить его как переменную-член (или передать объект в каждую функцию). вызов). Это работает, но это не так и требует больше написания кода.
Вместо этого я могу сделать Foo синглтоном (конечно, только если может быть только 1 экземпляр), а затем просто вызвать Foo :: getInstance () -> ... из A, B и C. И у меня нет пропускать любые предметы. Я нахожу это очень удобным.
Теперь проблема в том, что у меня может быть несколько случаев Foo. Очевидно, я не могу использовать шаблон синглтона. Но я не хочу передавать переменные и хранить их в классах-членах. Слишком много кода! :)
Как пример,
Я ненавижу это:
A::A(Foo* foo) : m_foo(foo)
{
}
и это:
void A::someFunc(Foo* foo, int someParam)
{
}
Но я люблю это:
A::A()
{
}
void A::someFunc(int someParam)
{
Foo* foo = Foo::getInstance();
}
Есть ли другой способ сделать это? Что-то, что напоминает синглтон?