私は最近、抽象クラスをインターフェイスとして使用するいくつかの例を実行しましたが、ファクトリコンストラクタを抽象インターフェイスに追加して、ある意味で「新しくする」ことができます。たとえば:このサービスのファクトリコンストラクタを持つ抽象クラスの利点は?
abstract class WidgetService {
factory WidgetService() = ConcreteWidgetService;
Widget getWidget();
void saveWidget(Widget widget);
}
class ConcreteWidgetService extends BaseWidgetService implements WidgetService {
WidgetService();
Widget getWidget() {
// code to get widget here
}
void saveWidget(Widget widget) {
// code to save widget here
}
}
用途はそうのようないくつかの他のサービスやコンポーネントで、次のようになります、線より上だろう、本質的に「新しい」アップこのサンプルの私の理解に基づいて
WidgetService _service = new WidgetService();
WidgetServiceは、通常、Dartアナライザから警告を生成します。サービス変数は、実際には、ConcreateWidgetServiceをWidgetServiceのファクトリコンストラクタに割り当てることに基づいて、ConcreateWidgetServiceのインスタンスになります。
このアプローチには利点がありますか?私のOOPの経験から、抽象クラス/インターフェースを使用して、私が与えられる具体的なタイプがわからないときに対処しました。ここでは、具体的な型を抽象ファクトリコンストラクタに直ちに割り当てるようです。私の2番目の質問はこのインスタンスにあると思います。すべてのメソッドシグネチャを繰り返すのではなく、ここで直接ConcreteWidgetServiceを使用するのはなぜですか?