ここで言及されているファクトリコンストラクタの例について、ちょっとした質問があります( https://www.dartlang.org/guides/language/language-tour#factory-constructors )。基本的なレベルでは、デフォルト、名前付き、パラメーター化の3種類のコンストラクターのみを認識しています。
1)静的メソッドとファクトリコンストラクターの間に大きな違いはありません。
ファクトリコンストラクタの場合、戻り値の型はクラスの型に固定されますが、静的メソッドの場合は、独自の戻り値の型を指定できます。
ファクトリコンストラクタはnew
で呼び出すことができますが、Dart 2ではオプションのnew
とはほとんど関係がなくなりました。
(ファクトリー)コンストラクターではサポートされているが静的メソッドではサポートされていない、あまり使用されないリダイレクトなどの機能があります。
オブジェクト作成の目的をより明確にするために、静的メソッドの代わりにファクトリコンストラクターを使用してクラスのインスタンスを作成することは、おそらくまだ良い習慣です。
これが、投稿した例でファクトリコンストラクタが使用されている理由であり、他のクラスと同じようにnew
を使用してロガーインスタンスを作成できるDart 1でコードが最初に作成されたためと考えられます。
2)はい、これは名前付きコンストラクタであり、プレフィックス_
はプライベートな名前付きコンストラクタにします。名前付きコンストラクターのみをプライベートにできます。それ以外の場合は、_
プレフィックスを追加する場所がないためです。
これは、パブリックファクトリコンストラクタ以外からのインスタンス作成を防ぐために使用されます。このようにして、アプリケーションに複数のLogger
インスタンスが存在しないことが保証されます。ファクトリコンストラクターはインスタンスを初めて作成するだけで、以降の呼び出しでは常に以前に作成されたインスタンスを返します。