我正在尝试在数据库帮助器类中实现单例模式,但是,我似乎无法理解工厂构造函数的用途以及是否有使用它的替代方法。
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;
}
答案 0 :(得分:4)
不需要使用工厂构造函数。
当new
还不是可选的时,工厂构造函数很方便,因为那时new MyClass()
适用于每次构造函数都返回一个新实例或该类返回一个缓存实例的类。知道实际创建对象的方式和时间不是呼叫者的责任。
您可以更改
factory DbHelper(){ return _db;}
到
DbHelper get singleton { return _db;}
并使用
获取实例var mySingletonReference = DbHelper.singleton;
代替
var mySingletonReference = DbHelper();
这只是一个偏好问题。
答案 1 :(得分:0)