Dart Singleton с параметрами: как создать синглтон с настраиваемыми аргументами

Чтобы создать синглтон с параметрами в Dart, вы можете следовать примеру ниже:

class MySingleton {
  final int parameter1;
  final String parameter2;

  static MySingleton _instance;
  factory MySingleton(int parameter1, String parameter2) {
    _instance ??= MySingleton._internal(parameter1, parameter2);
    return _instance;
  }
  MySingleton._internal(this.parameter1, this.parameter2);
  // Your singleton methods here
}

В приведенном выше коде мы определяем класс под названием MySingleton, который имеет два параметра: parameter1типа intи parameter2типа String. Класс также имеет частную статическую переменную _instanceтипа MySingleton.

Конструктор фабрики MySingletonпринимает параметры parameter1и parameter2. Он проверяет, имеет ли _instanceзначение NULL, и, если да, создает новый экземпляр MySingleton, вызывая частный конструктор _internalс предоставленными параметрами. После первого создания последующие вызовы конструктора фабрики вернут тот же экземпляр, хранящийся в _instance.

Вот пример использования синглтона:

void main() {
  var singleton1 = MySingleton(10, 'Hello');
  var singleton2 = MySingleton(20, 'World');
  print(singleton1.parameter1);  // Output: 10
  print(singleton1.parameter2);  // Output: Hello
  print(singleton2.parameter1);  // Output: 10 (same instance as singleton1)
  print(singleton2.parameter2);  // Output: Hello (same instance as singleton1)
  print(identical(singleton1, singleton2));  // Output: true (same instance)
}

В этом примере мы создаем два экземпляра MySingletonс разными значениями параметров. Однако, поскольку это синглтон, и singleton1, и singleton2относятся к одному и тому же экземпляру, что подтверждается проверкой identical.