flutter - 为什么我应该将返回的工厂实例设为静态字段?
问题描述
创建返回类实例的函数是对的,但是创建返回类实例的工厂应该是静态字段。为什么我应该将返回的工厂实例设为静态字段?
代码是:
class DBHelper{
DBHelper._();
factory DBHelper()=>instance; // ->> cursor error
// static
// final
DBHelper instance=DBHelper._();
int number=2;
int fun()=>number;
}
解决方案
我认为您并没有完全理解工厂方法的目的。您发布的示例是在 dart/flutter 中使用单例模式的方式。在我看来,这是创建单例类的最干净的方式。
现在可以使用工厂方法来简化对象的构造,并且它们根本不需要返回静态字段。这里有一些例子:
class OneObject {
final int one;
final String two;
final double three;
OneObject(this.one, this.two, this.three);
factory OneObject.withoudTwo(int one, double three) {
return OneObject(one, "2", three);
}
factory OneObject.fromJson(Map<String, dynamic> aMap) {
return OneObject(aMap["one"], aMap["two"], aMap["three"]); // this is bad use of json parsing
}
}
在您的情况下,这DBHelper._();
是该类的实际构造函数,并且将_
其设为私有,这允许您创建一个名为的工厂方法DBHelper.();
为了详细说明答案,工厂方法类似于静态方法,静态方法不能访问声明它们的类的实例成员,它们只能访问静态成员。在您的示例中,instance
只有在创建 DbHelper 的新实例时才会创建属性(没有静态),因此,从工厂方法返回它是不可能的,因为它还不可用。
推荐阅读
- database - 在雅典娜中创建 terraform 数据库
- android - 在 Android 的 Scrollview 中使用约束布局是个好主意吗?
- powershell - 使用正确的 CSV 输出将用户添加到 AD 组
- python - Pandas Dataframe 在出现十次以上的列中显示值
- abap - READ TABLE WITH TABLE KEY 找不到记录
- javascript - 如何在 React 中修复“TypeError:results.map 不是函数”
- firebase-realtime-database - 如何保护函数 createUserWithEmailAndPassword() 不被其他网站调用
- http - 使用“+=”缓慢构建长字符串
- python - 如何优化这个for循环?有没有一条线?
- asp.net - VB.NET 事件不工作或显示信息?