Это действительно зависит от вашего сценария. Если AClientMethodsImplementation
должен быть без состояния (он не будет хранить данные, связанные с экземпляром, между вызовами методов), вы должны объявить все его члены static
:
class AClientMethodsImplementation {
static async getSomeData() {
AClient client = MyClass.getInstance().getClient();
}
}
class NeedDataHere {
// Call static methods
let data = AClientMethodsImplementation.getSomeData();
}
Если AClientMethodsImplementation
должен хранить экземпляр связанных данных, вам, конечно же, придется создать новый экземпляр (за исключением того, что конкретный метод не изменяет экземпляр. В этом случае это может быть static
). Если вы хотите, чтобы этот экземпляр был одинаковым во всем приложении, вы можете реализовать AClientMethodsImplementation
как Singleton.
Предпочтительной альтернативой шаблону Singleton является использование Dependency Injection (реализация Io C шаблон). Таким образом, вы можете использовать один и тот же экземпляр, но без ущерба для слабой связи и тестируемости.
Обычно вы используете общие экземпляры (через Dependency Injection или Singleton), когда хотите использовать состояние одного объекта в глобальной области, например объект сеанса как повар ie. Другой вариант использования - создание экземпляра может быть слишком дорогим из-за выделения ресурсов или из-за того, что создание экземпляра занимает слишком много времени. Затем вы выделяете ресурсы один раз, например, соединение с базой данных / сервисом, и повторно используете его (общие ресурсы). Другой вариант использования - предоставить контролируемый доступ к совместно используемому ресурсу, например к кэшу данных. Например, вы обычно используете общий экземпляр регистратора в приложении.
При проверке кода преимуществом общего экземпляра AClient
может быть повышенная производительность. Если вы можете сказать, что клиент предоставляет дорогостоящие общие ресурсы или данные или, как правило, слишком дорого для создания нескольких экземпляров, то стоит поделиться экземпляром. Тот факт, что вы по-прежнему создаете несколько экземпляров AClientMethodsImplementation
, не делает общий экземпляр избыточным, очевидно.