###定義
Factory修飾子のついたコンストラクタのこと。
呼び出し側でインスタンス生成を試みた場合(newした場合)、
通常であれば引数に応じて呼び出されるコンストラクタが決定し、自動的にインスタンスが生成される。
その一方で、呼び出されたコンストラクタにFactory修飾子がついていた場合は
自動的にインスタンスの生成はされないため、そのコンストラクタ内でnewする必要がある。
∵Factory修飾子自体が、キャッシュされたインスタンスを呼び出すために実装されているため
###躓いた箇所
(③)Factory修飾子のついたコンストラクタ内でnewされることによって、
(④)さらにもう一度、そのクラス内の別のFactory修飾子のついていない方のコンストラクタが呼び出される。
→通常、呼び出されるコンストラクタは1つのみという思い込みがあり、気づくの時間を要した。
class Name {
final String first;
final String last;
factory Name(String name) {
var parts = name.split(' '); // ②引数に渡された文字列をスペースで分割して配列に格納
return new Name._(parts[0], parts[1]); // ③ここで初めてインスタンスを作成
}
Name._(this.first, this.last); // ④2回目に呼び出されるコンストラクタ
}
main() {
Name name = new Name("Fred Flinstone"); //①factory Name(String name)コンストラクタを呼び出し
print("${name.first} ${name.last}"); // ⑤2回目に呼び出されたコンストラクタが反映される
}
###上記コードの出自
公式様
https://sites.google.com/site/dartlangexamples/learn/class/constructors
Constructors
a.Generative
b.Named
c.Factory
d.Inheritance
###用途
Singletonパターンを実装するときに利用されるそうです。
https://flutter.keicode.com/dart/constructor.php
###Advanced Info
こちらの記事だと説明が丁寧でわかりやすかった。
https://medium.com/nerd-for-tech/factory-constructor-in-dart-part-1-1bbdf0d0f7f0
もっと詳しい内容
http://tech.curlap.com/curlguide/curl/docs/rte/8.0/ja/docs/ja/dguide/constructors.html