Как реализовать шаблон Singleton в Dart, используя фабричные конструкторы?
Я пытаюсь реализовать шаблон синглтона в вспомогательном классе базы данных, но я не могу понять цель конструктора фабрики и есть ли альтернативный метод для его использования.
class DbHelper {
final String tblName ='';
final String clmnName ='';
final String clmnPass='';
DbHelper._constr();
static final DbHelper _db = new DbHelper._constr();
factory DbHelper(){ return _db;}
Database _mydb;
Future<Database> get mydb async{
initDb() {
if(_mydb != null)
{
return _mydb;
}
_mydb = await initDb();
return _mydb;
}
2 ответа
Решение
Нет необходимости использовать конструктор фабрики. Конструктор фабрики был удобен, когда new
не было еще необязательно, потому что тогда это new MyClass()
работал для классов, где конструктор каждый раз возвращал новый экземпляр или когда класс возвращал кэшированный экземпляр. Вы не должны были знать, как и когда объект был создан.
Ты можешь измениться
factory DbHelper(){ return _db;}
в
DbHelper get singleton { return _db;}
и получить экземпляр с помощью
var mySingletonReference = DbHelper.singleton;
вместо
var mySingletonReference = DbHelper();
Это просто вопрос предпочтений.
Я также нашел эту статью полезной: https://theburningmonk.com/2013/09/dart-implementing-the-singleton-pattern-with-factory-constructors/