web-dev-qa-db-ja.com

Factoryコンストラクターのコード例を理解する-Dart

ここで言及されているファクトリコンストラクタの例について、ちょっとした質問があります( https://www.dartlang.org/guides/language/language-tour#factory-constructors )。基本的なレベルでは、デフォルト、名前付き、パラメーター化の3種類のコンストラクターのみを認識しています。

  1. この例でなぜfactoryを使用する必要があるのですか?
  2. それは使用されている名前付きコンストラクタですか?なぜ? Example factory constructor
35
Ananta K Roy

1)静的メソッドとファクトリコンストラクターの間に大きな違いはありません。

ファクトリコンストラクタの場合、戻り値の型はクラスの型に固定されますが、静的メソッドの場合は、独自の戻り値の型を指定できます。

ファクトリコンストラクタはnewで呼び出すことができますが、Dart 2ではオプションのnewとはほとんど関係がなくなりました。

(ファクトリー)コンストラクターではサポートされているが静的メソッドではサポートされていない、あまり使用されないリダイレクトなどの機能があります。

オブジェクト作成の目的をより明確にするために、静的メソッドの代わりにファクトリコンストラクターを使用してクラスのインスタンスを作成することは、おそらくまだ良い習慣です。

これが、投稿した例でファクトリコンストラクタが使用されている理由であり、他のクラスと同じようにnewを使用してロガーインスタンスを作成できるDart 1でコードが最初に作成されたためと考えられます。

2)はい、これは名前付きコンストラクタであり、プレフィックス_はプライベートな名前付きコンストラクタにします。名前付きコンストラクターのみをプライベートにできます。それ以外の場合は、_プレフィックスを追加する場所がないためです。

これは、パブリックファクトリコンストラクタ以外からのインスタンス作成を防ぐために使用されます。このようにして、アプリケーションに複数のLoggerインスタンスが存在しないことが保証されます。ファクトリコンストラクターはインスタンスを初めて作成するだけで、以降の呼び出しでは常に以前に作成されたインスタンスを返します。

2