如何使用工厂构造函数在 Dart 中实现单例模式?
How to implement Singleton pattern in Dart using factory constructors?
我正在尝试在数据库助手中实现单例模式 class,但是,我似乎无法理解工厂构造函数的用途以及是否有其他方法可以使用它。
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;
}
不需要使用工厂构造函数。
当 new
还不是可选的时候,工厂构造函数很方便,因为那时它 new MyClass()
为 class 工作,构造函数每次都返回一个新实例,或者 class 返回一个缓存的实例。知道对象实际创建的方式和时间不是调用者的责任。
你可以改变
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/
我正在尝试在数据库助手中实现单例模式 class,但是,我似乎无法理解工厂构造函数的用途以及是否有其他方法可以使用它。
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;
}
不需要使用工厂构造函数。
当 new
还不是可选的时候,工厂构造函数很方便,因为那时它 new MyClass()
为 class 工作,构造函数每次都返回一个新实例,或者 class 返回一个缓存的实例。知道对象实际创建的方式和时间不是调用者的责任。
你可以改变
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/