Factory constructors는 인스턴스 캐싱, 각기 다른 클래스의 인스턴스 반환, 혹은 Singleton patterns 구현 등 인스턴스 생성시 더 많은 제어가 필요할 때 사용된다.
Key points about Factory constructors in Dart.
- 항상 새로운 instance를 만들지 않고 다른 class의 instances, 기존 instance, null을 반환할 수 있다.
- this를 사용할 수 없다.
- Named constructors를 사용하여 instance생성의 다양한 방법을 제공한다.
- 사용예 :
- 객체 caching
- 조건에 따른 cached instances 반환
- parameters에 따른 subclass 반환
1. Singleton pattern
class Singleton {
static Singleton? _instance;
// Private constructor
Singleton._();
// Factory constructor to implement singleton pattern
factory Singleton.getInstance() {
if (_instance == null) {
_instance = Singleton._();
}
return _instance!;
}
}
void main() {
var singleton1 = Singleton.getInstance();
var singleton2 = Singleton.getInstance();
print(identical(singleton1, singleton2)); // Output: true (same instance)
}
true
2. Singleton pattern
class Database {
static final Database _instance = Database._internal();
Database._internal() {
print("Called Constructors");
}
factory Database.instance() => _instance;
info() {
print(identityHashCode(_instance));
}
}
void main() {
Database d1 = Database.instance();
d1.info();
Database d2 = Database.instance();
d2.info();
Database d3 = Database.instance();
d3.info();
print("");
print(identical(d1, d2));
print(identical(d2, d3));
}
Called Constructors
974343521
974343521
974343521
true
true
https://dart.dev/language/constructors#factory-constructors