我正在尝试在数据库帮助程序类中实现单例模式,但是,我似乎无法理解工厂构造函数的用途以及是否有使用它的替代方法。
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()
可以用于每次构造函数都返回一个新实例或该类返回一个缓存实例的类。知道如何实际创建对象以及何时创建对象不是 call 者的责任。
你可以改变
factory DbHelper(){ return _db;}
至
DbHelper get singleton { return _db;}
并使用获取实例
var mySingletonReference = DbHelper.singleton;
代替
var mySingletonReference = DbHelper();
这只是一个偏好问题。