В софтуерното инженерство моделът на дизайн сингълтон е модел на проектиране, който ограничава инстанцията на клас до един обект. Това е полезно, когато е необходим точно един обект за координиране на действията в системата.

В езика за програмиране Dart има множество начини за внедряване на единичен клас

  1. Използване на фабричен конструктор: Както е показано в примера, можете да използвате фабричен конструктор с частен, вътрешен конструктор, за да създадете единичен клас. Това позволява на класа да контролира собственото си инстанциране и да гарантира, че е създаден само един екземпляр на класа.

Това може да се реализира чрез създаване на единичен клас с частен конструктор и статичен метод, който връща едно и също копие на класа при всяко извикване. Например:

class Singleton {
  static final Singleton _instance = Singleton._internal();

  factory Singleton() {
    return _instance;
  }

  Singleton._internal();

  // Other methods and properties...
}

За да използвате този клас, трябва да извикате статичния метод Singleton(), за да получите екземпляра на класа, както следва:

Singleton instance = Singleton();

Това гарантира, че може да бъде създаден само един екземпляр на класа Singleton и всеки код, който трябва да използва сингълтона, може да получи достъп до него чрез същия екземпляр.

2. Използване на статично поле: Друг начин за внедряване на единичния модел в Dart е използването на статично поле за задържане на единичния екземпляр на класа. Това може да стане чрез деклариране на статично поле с getter метод, който връща екземпляра на класа. Например:

class Singleton {
  static final Singleton _instance = Singleton._internal();

  factory Singleton() {
    return _instance;
  }

  Singleton._internal();

  static Singleton get instance {
    return _instance;
  }

  // Other methods and properties...
}

В този случай ще осъществите достъп до сингълтон екземпляра с помощта на instance getter, като този:

Singleton instance = Singleton.instance;

3. Използване на статичен метод: Друг начин за внедряване на единичния модел в Dart е използването на статичен метод, който връща единствения екземпляр на класа. Това може да стане чрез деклариране на статичен метод, който проверява дали екземпляр на класа вече е създаден и ако не, създава нов екземпляр. Например:

class Singleton {
  static Singleton _instance;

  factory Singleton() {
    if (_instance == null) {
      _instance = Singleton._internal();
    }
    return _instance;
  }

  Singleton._internal();

  static Singleton getInstance() {
    if (_instance == null) {
      _instance = Singleton._internal();
    }
    return _instance;
  }

  // Other methods and properties...
}

В този случай ще осъществите достъп до единичния екземпляр с помощта на метода getInstance()като този:

Singleton instance = Singleton.getInstance();

Това са само няколко примера за това как моделът на дизайн сингълтън може да бъде внедрен в Dart. В крайна сметка подходът, който изберете, ще зависи от вашите специфични нужди и дизайна на вашия проект.